Можно ли использовать старую школу 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