Можно ли использовать старую школу 2d на современном графическом процессоре?

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

Это потрясающе.

В современных современных графических процессорах возможно создание универсальной графики старой школы программирование (aka - blit от X rect to Y rect с помощью VRAM)? (Think Amiga) Или сосредоточены операции вокруг вершинных и пиксельных шейдеров?

Доступно ли это из GL? OpenGL ES?

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

В Windows вы можете использовать низкоуровневые функции копирования растровых изображений, которые точно соответствуют старому описанию без каких-либо OpenGL и т.д.

BOOL BitBlt(
  _In_ HDC   hdcDest,
  _In_ int   nXDest,
  _In_ int   nYDest,
  _In_ int   nWidth,
  _In_ int   nHeight,
  _In_ HDC   hdcSrc,
  _In_ int   nXSrc,
  _In_ int   nYSrc,
  _In_ DWORD dwRop
);

https://msdn.microsoft.com/en-us/library/dd183370%28v=vs.85%29.aspx