Цитата Сообщение от TSL Посмотреть сообщение
1. Дофига ненужных копирований.
2. Ограничиваться 2мя плоскостями неудачное решение.
Хорошо, что 2 срамы. Я бы предложил строить изображение спрайтовой графики построчным рендерером в буфер одной строки (память альтеры), используя графику из 1й срамы. С использованием набора ФСМ и дисплейлиста. Где нибудь в памяти (ОЗУ, ФПРАМ) лежит лист, в котором описана последовательность вызова ФСМ в каждой строке. Типы ФСМ: тайлы (текстмод), спрайты (массив прямоугольных объектов), линейная графика. Для "линейной графики" в листе можно указать адрес чтения графики в данной строке, и необязательно один, можно указать 2 или более источников и смешивать их по альфе. Слоев при это может быть немеряно.
Сюда же влазит и зумскейл спрайтов, потому что можно рассчитать адреса чтения пикселей в указанной строке экрана и координате Х по координатам и параметрам зумротации спрайта.
Во 2й сраме можно заюзать блиттер, которым например рисовать графические примитивы или делать текстурный маппинг. Т.е. делать вещи, которые невозможно привести к ФСМ для одной строки, и которые работают в течении фрейма.
Вывод видео читает данные из 2й срамы, накладывает поверх них (или по 0му цвету, или по альфе) оверлейный буфер, построенный по дисплейлисту из графики 1й срамы (кстати, в буфере можно хранить 4 байта РГБ+альфа).
В принципе да, по моему способу сначала спрайты копируются блиттером из ОЗУ спрайтов в ОЗУ экрана, а потом сканером из ОЗУ экрана на TV. А у вас, имея код спрайта в памяти ПЛИС можно сканеру из этого номера получать адрес нужной точки в ОЗУ, загружать его и отображать на TV. Небольшая экономия при пересылках есть.

Кроме этого можно каждый кадр отправлять в видеокарту номера всех спрайтов, видимых на экране и смещения отображения всех спрайтов по-горизонтали и вертикали для реализации скроллинга. Только при однобайтных номерах на экране можно отобразить только спрайты до из набора 256, а в ОЗУ спрайтов может их быть до 2048 при размере спрайта 16х16.

Вроде все хорошо, но графика фона может получиться однообразной - весь фон будет сдвигаться одновременно. А в некоторых играх для создания объема в движении желательно использовать эффект параллакса. Для этого полосы экрана сдвигаются с разной скоростью.

Также больше двух слоев может пригодиться для игр типа DOOM2:
1 слой - оружие игрока
2 слой - ближайший монстр
3 слой - дальние монстры
4 слой - стены лабиринта и все остальное

Вроде все хорошо, но потом понадобится еще больше слоев, так как на слоях 3 и 4 может быть по нескольку загораживающих друг друга объектов.

Может лучше сделать один слой, но два экрана как ZX128 ? И добавить аппаратное копирование спрайтов на слой с учетом прозрачного цвета. Тогда мы просто путем копирования создаем фон, на него поочередно копируем все остальные спрайты, начиная с дальнего. Таким образом все объекты будут правильно загораживать дальних. А второй экран нам понадобится для отображения всей этой стопки объектов одним переключением экрана. А подготавливать изображение на том экране, который сейчас не отображается.