Действительно ли возможно сделать старое школьное 2-е блитирование на современном GPU?

Похоже, что GL стал господствующей тенденцией для всех играющих платформ (даже карманный компьютер!) Это продвинуло развертывание современных чипсетов GPU к большим количествам потребителей.

Это удивительно.

С современными системами GPU там теперь, действительно ли возможно сделать универсальное олдскульное программирование графики (иначе - блитируют от X, реагируют на Y, реагируют с помощью VRAM)? (Думайте Amiga), Или операции центрируются вокруг вершинных и пиксельных шейдеров?

Действительно ли это доступно от GL? OpenGL ES?

Рендеринг текстурированной четверки в порядке, но он потребовал бы двойной буферизации и перерендеринга всей сцены. Видел, мог ли я избежать этого.

12
задан genpfault 21 April 2011 в 18:59
поделиться

5 ответов

Проверка подпрограммы BlitFramebuffer ( Объект Framebuffer ). Вам нужен обновленный драйвер.

Имейте в виду, что пока вы можете использовать фреймбуфер по умолчанию, но я думаю, что будет более забавно использовать объекты фреймбуфера.

Храните ваш спрайт в отдельных фреймбуферах (может быть, рендеринг с использованием OpenGL), установите их как прочитанные (используя glReadBuffers) и скопируйте их в фреймбуфер отрисовки (используя glDrawBuffers). Это довольно просто и быстро.

7
ответ дан 2 December 2019 в 22:05
поделиться

В некоторых встроенных системах возможно получить указатель фреймбуфера и записать в него напрямую, но в наши дни лучше использовать OpenGL | ES и визуализировать текстуру. Он будет более портативным и, вероятно, быстрее.

Вы можете создать буфер в основной памяти, делать все, что хотите, а затем визуализировать его как текстуру. Вы можете DMA своих данных текстуры во VRAM для скорости, а затем отрендерить их в четырехугольнике, что эквивалентно блит, но не использует циклы процессора и работает так быстро, как может обрабатывать графический процессор.

Удивительно, что сегодня можно делать с шейдерами и программируемыми конвейерами.

1
ответ дан 2 December 2019 в 22:05
поделиться

Если вы рисуете текстурированные квадраты, с помощью которых вы можете легко имитировать блиттинг «старой школы», то действительно, пиксели копируются из видеопамяти графическим процессором. Также обратите внимание, что хотя операции с растровыми изображениями возможны в OpenGL, они могут быть очень медленными, потому что 3D-путь оптимизирован на видеокартах потребительского уровня, тогда как 2D-пути могут быть не такими.

1
ответ дан 2 December 2019 в 22:05
поделиться

Что ж, вы можете использовать libSDL и получить указатель на экранный буфер кадра и делать с пикселями все, что захотите. Или вы можете делайте все свои рисунки в буфере памяти, загружайте в текстуру GL и рисуйте текстурированные квадраты, что, вероятно, быстрее из-за аппаратного ускорения.

2
ответ дан 2 December 2019 в 22:05
поделиться

Кроме того, glCopyPixels, похоже, помогает, если вы правильно настроили окружение.

0
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: