Важная информация

User Tag List

Страница 19 из 53 ПерваяПервая ... 151617181920212223 ... ПоследняяПоследняя
Показано с 181 по 190 из 526

Тема: Новый принцип устранения клешинга

  1. #181

    Регистрация
    18.09.2008
    Адрес
    Донецкая обл.
    Сообщений
    95
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    о четыре одноцветных дырявых слоя мне "с головой"
    Давайте возьмем 250 слоев с масками, это меньше чем 3 мегабайта памяти.. Я не вижу тут никакой принципиально-неразрешимой трагедии.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    эти пиксели всё равно находятся где-то в памяти.
    Как раз весь фокус, что нигде в памяти спектрума нет этих пикселей, в том виде, как они отображаются на экране. Они существуют только в памяти видеокарты. И получаются там последовательным наложением графических объектов. Поэтому
    Цитата Сообщение от Lethargeek Посмотреть сообщение
    переброской снятого заранее куска фона
    восстановить ничего так просто не получится, потому что родные процедуры восстановления понятия не имеют, что фон уже не просто монохромные однобитные пиксели, а сложная многоцветная картинка с "атрибутом на пиксель". Вам нужно как-то прочесть эти самые "атрибуты" и где-то их сохранить, прежде чем рисовать новый спрайт поверх них.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Они тупо затирают кусок экрана сохранённым в буфере куском фона
    И получаем монохромное изображение под затертым спрайтом. Или вы собираетесь угадывать, откуда процедура взяла байт для сохранения в буфере, а потом для чего прочитала байт из буфера и соответствующим образом перетаскивать параллельно пиксельные атрибуты в памяти видеокарты(а-ля Спек256)?

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Я ж могу переносить и перекрашивать попиксельно любые восьмипиксельные полоски (так же, как на Спеке, и даже проще).
    Это замечательно. Но нам надо перекрасить их "так как там было" до того, как там нарисовали курсор мыши. На Спеке для этого делают буфер на 16 байт (для курсора 8х16) и сохраняют "как было" в нём. Теперь по-вашему методу, 16 байт как в Спеке уже не хватит - каждый пиксель кроме состояния 0/1 несет еще и информацию о цвете. Как ее получать из видеокарты, где хранить и как потом записать обратно?

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Это обещать несложно, а сделать сложно (уж сложнее мелкой правки графпроцедур)
    Да что там сложного-то? Можно даже аппаратно сделать, чтобы последний записанный слой автоматически становился самым верхним. Это будет полностью имитировать последовательное наложение объектов. Хотя, на самом деле такое и не нужно. Достаточно одного байта для хранения номера текущего слоя. В начале цикла обнуляем его, а в процессе отрисовки объектов инкрементируем. Всё. Объекты будут укладываться в слои точно в порядке отрисовки, как вы и хотели.

  2. #181
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #182

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Давайте возьмем 250 слоев с масками, это меньше чем 3 мегабайта памяти..
    а давайте вспомним, что пиксельклок PAL кадра ~ 7мгц
    спросим, на какую частоту памяти в современных самоделках стоит рассчитывать
    и прикинем, сколько за 1/50 секунды можно прочитать слоёв для отображения
    (а еще ведь, кроме отображения, требуются такты в них рисовать)

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Я не вижу тут никакой принципиально-неразрешимой трагедии.
    а я не вижу смысла в жирном девайсе для решения одной лишь частной задачи
    на пределе способном выдать только *****картинку без потенциала для улучшения

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Как раз весь фокус, что нигде в памяти спектрума нет этих пикселей, в том виде, как они отображаются на экране. Они существуют только в памяти видеокарты. И получаются там последовательным наложением графических объектов. Поэтому
    Цитата Сообщение от inozemcew Посмотреть сообщение
    восстановить ничего так просто не получится, потому что родные процедуры восстановления понятия не имеют, что фон уже не просто монохромные однобитные пиксели, а сложная многоцветная картинка с "атрибутом на пиксель". Вам нужно как-то прочесть эти самые "атрибуты" и где-то их сохранить, прежде чем рисовать новый спрайт поверх них.
    Цитата Сообщение от inozemcew Посмотреть сообщение
    Это замечательно. Но нам надо перекрасить их "так как там было" до того, как там нарисовали курсор мыши. На Спеке для этого делают буфер на 16 байт (для курсора 8х16) и сохраняют "как было" в нём. Теперь по-вашему методу, 16 байт как в Спеке уже не хватит - каждый пиксель кроме состояния 0/1 несет еще и информацию о цвете. Как ее получать из видеокарты, где хранить и как потом записать обратно?
    а до конца дочитывать не судьба?
    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Даже если фон многоцветный, а не двухцветный, в памяти видеокарты можно хоть на каждый бит из памяти Спектрума выделить по полноцветному пикселю (если для совсем уж ленивых).
    Впрочем, сохранять текущую подложку перед выводом каждого объекта просто невыгодно, и неудобно восстанавливать всегда в обратном порядке. Вряд ли в играх часто применяется такой метод. Статичный фон лучше сохранить заранее целиком или таблицей ссылок на тайлы, и оттуда брать нужные куски для восстановления; а динамичным фоном - в буфере полностью стирать старый кадр.

    Цитата Сообщение от inozemcew Посмотреть сообщение
    И получаем монохромное изображение под затертым спрайтом. Или вы собираетесь угадывать, откуда процедура взяла байт для сохранения в буфере, а потом для чего прочитала байт из буфера и соответствующим образом перетаскивать параллельно пиксельные атрибуты в памяти видеокарты(а-ля Спек256)?
    ЧТО угадывать? Адреса всех операций видны на шине. Если Спектрум переносит байт из буфера на экран, карта может сделать то же самое у себя для соответствующей группы из восьми пикселей.

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Да что там сложного-то? Можно даже аппаратно сделать, чтобы последний записанный слой автоматически становился самым верхним. Это будет полностью имитировать последовательное наложение объектов. Хотя, на самом деле такое и не нужно. Достаточно одного байта для хранения номера текущего слоя. В начале цикла обнуляем его, а в процессе отрисовки объектов инкрементируем.
    И тут - опа! - вдруг закончились чистые слои (а нечистые нельзя наверх перетаскивать). Кстати, как узнать, что объект со слоя был убран полностью? а не остался, скажем, трупом или обломками (есть игра, в которой нужно буквально карабкаться по кучам тел убитых врагов)
    Прихожу без разрешения, сею смерть и разрушение...

  4. #183

    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    5,605
    Спасибо Благодарностей отдано 
    254
    Спасибо Благодарностей получено 
    269
    Поблагодарили
    188 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    есть игра, в которой нужно буквально карабкаться по кучам тел убитых врагов
    что за игра?
    ___________

  5. #184

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZX_NOVOSIB, угадай (подсказка: ******* *** *******) тащемта игра довольно известная
    Прихожу без разрешения, сею смерть и разрушение...

  6. #185

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,289
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    подсказка: ******* *** *******
    N.. the W...

  7. #186

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Давайте возьмем 250 слоев с масками


    может уже проще взять spec256

    или запилить что нибудь с похожим принципом работы

    и не обязательно городить 15 спектрумов для этого
    нужно только в N раз больше памяти по быстрее
    и новый самопальный проц

  8. #187

    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    5,605
    Спасибо Благодарностей отдано 
    254
    Спасибо Благодарностей получено 
    269
    Поблагодарили
    188 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    угадай (подсказка: ******* *** *******) тащемта игра довольно известная
    Цитата Сообщение от goodboy Посмотреть сообщение
    N.. the W...
    Игра может и известная, однако дичайше однообразная и скучная, графики нет вообще, художник не парился. Скачал rzx - прохождение 45 мин., тому, кто 45 минут вытерпел это однообразие нужно медаль дать
    И хотя игру бы это не спасло, но лучше бы ГГ не перенимал цвет фоновых обектов - выглядит убого. В диззи это канает, в этой игре абсолютно нет.
    ___________

  9. #188

    Регистрация
    18.09.2008
    Адрес
    Донецкая обл.
    Сообщений
    95
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а давайте вспомним, что пиксельклок PAL кадра ~ 7мгц
    спросим, на какую частоту памяти в современных самоделках стоит рассчитывать
    Понятное дело, что 250 это не 4 и не 8, мультиплексировать на ходу такое не нужно. Тут нужен внутренний Z-буфер и пересчет видимого пикселя только во время записи. Опять же ничего нереального. Единственное что нереально, это то, что нам действительно понадобятся аж 250 слоев.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    И тут - опа! - вдруг закончились чистые слои
    А мы продолжаем рисовать, как ни в чем не бывало. Пусть все падает в верхний слой и там клэшится. Тут же вся изюминка, что эта штука отлично масштабируется. Процедурки вывода не меняются же, есть новый слой - рисуется без клэшинга, нету - значит рисуется, как в обычном Спеке. А если когда-то потом аппаратных слоев добавить все расклэшится само собой.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а я не вижу смысла в жирном девайсе для решения одной лишь частной задачи
    Вообще-то мы обсуждаем принципы устранения клэшинга. Как отдельный девайс возможно оно и не нужно, а вот как режим какой-нибудь вундервидеокарты - вполне.


    Цитата Сообщение от Lethargeek Посмотреть сообщение
    сохранять текущую подложку перед выводом каждого объекта просто невыгодно,
    Это как раз неважно. Масса существующих игр делает именно так.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Адреса всех операций видны на шине. Если Спектрум переносит байт из буфера на экран, карта может сделать то же самое у себя для соответствующей группы из восьми пикселей.
    Очень сомнительно, что такое вообще возможно. Во-первых буфер один, а спрайт может выводиться в любое место экрана. Надо как-то устанавливать соответствие внутрях видеокарты между буфером и положением спрайта. Я не представляю, как это можно сделать из-за того, что во-вторых, нет одной единственной операции "перенести байт из экрана в буфер". Есть 100500 способов перемещения байтов, как в одиночку, так и попарно. И все они не атомарны. Между чтением из экрана и записью в буфер может произойти куча всего, включая прерывания. Как вы будете отлавливать это на шине? Чего-то мне кажется, что если бы все было так просто, авторы Спек256 не заморачивались бы с альтернативным процессором.

  10. #189

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,336
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Адреса всех операций видны на шине. Если Спектрум переносит байт из буфера на экран, карта может сделать то же самое у себя для соответствующей группы из восьми пикселей.
    Чтобы уследить за регистрами Z80, через которые всё в основном переносится(за исключением переноса по LDI)... Так вот, чтобы уследить за регистрами Z80... , хм, надо почти полностью эмулировать Z80!

    - - - Добавлено - - -

    Причём и прерывания вместе с ним ловить и обрабатывать, а не только команды расшифровывать и выполнять для раскрашенных регистров.
    Без прерываний Амауроте не пойдёт точно.

    Да ещё и по хорошему, раз у нас две гимнастки выполняют синхронные упражнения, то нужен и судья, оценивающий синхронность. В простом случае, при рассинхрозе показывать "синий экран" и все стопорить до сброса. Чуть сложнее, научить карту игнорировать, и пытаться восстановить синхронизацию.

    В общем марока.

  11. #190

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Понятное дело, что 250 это не 4 и не 8, мультиплексировать на ходу такое не нужно. Тут нужен внутренний Z-буфер и пересчет видимого пикселя только во время записи. Опять же ничего нереального. Единственное что нереально, это то, что нам действительно понадобятся аж 250 слоев.
    да-да, снова нужно то, нужно сё, нужно что-нибудь еще...
    интерес не в теоретической возможности, а в оправданности
    и по сравнению с однослойной схемой получилось, что многослойная:
    1) требует больших аппаратных ресурсов
    2) требует больших трудозатрат при модернизации старых игр
    3) принципиально выдаёт картинку худшего качества (хоть с 250 слоями)
    4) неудобна для приделывания к ней полезных расширений типа блиттера
    и к тому же:

    Цитата Сообщение от inozemcew Посмотреть сообщение
    А мы продолжаем рисовать, как ни в чем не бывало. Пусть все падает в верхний слой и там клэшится.
    5) ...на самом деле толком не устраняет клэшинг!

    Цитата Сообщение от inozemcew Посмотреть сообщение
    А мы продолжаем рисовать, как ни в чем не бывало. Пусть все падает в верхний слой и там клэшится. Тут же вся изюминка, что эта штука отлично масштабируется. Процедурки вывода не меняются же, есть новый слой - рисуется без клэшинга, нету - значит рисуется, как в обычном Спеке. А если когда-то потом аппаратных слоев добавить все расклэшится само собой.
    "новый принцип устранения клэшинга когда-то потом"

    (нужно сделать новым заголовком тредика, ящетаю))

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Вообще-то мы обсуждаем принципы устранения клэшинга. Как отдельный девайс возможно оно и не нужно, а вот как режим какой-нибудь вундервидеокарты - вполне.
    Осталось понять, зачем "какой-нибудь вундервидеокарте" столь убогий прожорливый режим, когда задачу устранения клэшинга выгодней и лучше решить иначе.

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Это как раз неважно. Масса существующих игр делает именно так.
    "Масса" - эта скока? Парочку примеров хотя бы? Именно чтоб процедура вывода спрайта каждый раз сохраняла кусок фона под этим спрайтом со всем там нарисованным до того, а потом перед новым кадром медленно и печально восстанавливала фон в обратном порядке? Вот ни разу не встречалось такого, в то время как наткнуться на "формирование кадра в буфере с нуля" можно часто. Наши хакеры, бывало, даже делали ускоренные версии таких игр для 128k (например, такой Thanatos я ковырял) - разворачивая цикл переброски буфера на страницу.

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Очень сомнительно, что такое вообще возможно. Во-первых буфер один, а спрайт может выводиться в любое место экрана.
    Буфера! Если буфер есть, то спрайты туда рисуют. А уж буфер после переносится на экран.

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Надо как-то устанавливать соответствие внутрях видеокарты между буфером и положением спрайта.
    Ну при чем тут "положение спрайта"?? Нужно только знать адреса, где может храниться графика. Даже безразлично, в какой раскладке.

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Я не представляю, как это можно сделать из-за того, что во-вторых, нет одной единственной операции "перенести байт из экрана в буфер". Есть 100500 способов перемещения байтов, как в одиночку, так и попарно. И все они не атомарны. Между чтением из экрана и записью в буфер может произойти куча всего, включая прерывания. Как вы будете отлавливать это на шине?
    Да никак не буду. Способы перемещения не волнуют, если сами байты не изменяются (а если байты изменяются в процессе, то это не переброска, а отрисовка, вопрос отдельный). Нужно только помнить последний адрес, по которому читалось что-то из буфера.

    Цитата Сообщение от inozemcew Посмотреть сообщение
    Чего-то мне кажется, что если бы все было так просто, авторы Спек256 не заморачивались бы с альтернативным процессором.
    Так у них была задача раскрасить игры вовсе без вмешательства в старый код и без претензий на физическую реализацию.

    - - - Добавлено - - -

    Цитата Сообщение от Reobne Посмотреть сообщение
    Чтобы уследить за регистрами Z80, через которые всё в основном переносится(за исключением переноса по LDI)... Так вот, чтобы уследить за регистрами Z80... , хм, надо почти полностью эмулировать Z80!
    Именно для переброски блока как раз не надо, интересуют исключительно адреса.

    Цитата Сообщение от Reobne Посмотреть сообщение
    Причём и прерывания вместе с ним ловить и обрабатывать, а не только команды расшифровывать и выполнять для раскрашенных регистров.
    "б-же мой, да насрать" мне на прерывания! Ну, разве (чисто теоретически) кроме случаев, когда после чтения буфера прерванным кодом прерывание зачем-то тоже читает буфер. Можешь выдумать вменяемый сценарий, зачем так делать? Переброска (в over 95% игр-то уж точно) либо полностью в обычном коде, либо полностью же - в обработчике прерывания. Хотя можно и за прерываниями следить, вход-возврат на шине прекрасно видно, и выполнять какой-нибудь аналог команды EXX для нескольких регистров видеокарты (или даже в обработчике добавить код её вызова).
    Прихожу без разрешения, сею смерть и разрушение...

Страница 19 из 53 ПерваяПервая ... 151617181920212223 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 43
    Последнее: 03.10.2015, 07:09
  2. принцип переключения адресных страниц в ПЗУ
    от Руслан в разделе Несортированное железо
    Ответов: 11
    Последнее: 10.04.2013, 16:50
  3. AY принцип формирования сигнала.
    от Руслан в разделе Звук
    Ответов: 5
    Последнее: 29.03.2013, 17:08
  4. Принцип работы M1 на Scorpion
    от TmK в разделе Программирование
    Ответов: 8
    Последнее: 17.08.2009, 15:40

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •