Можно ли делать олдскульные 2d блинты на современных графических процессорах? - PullRequest
12 голосов
/ 28 февраля 2010

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

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

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

Это доступно из GL? OpenGL ES?

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

Ответы [ 6 ]

7 голосов
/ 02 марта 2010

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

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

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

2 голосов
/ 28 февраля 2010

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

1 голос
/ 01 марта 2010

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

1 голос
/ 28 февраля 2010

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

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

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

0 голосов
/ 05 августа 2015

В 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

0 голосов
/ 08 марта 2010

Кроме того, glCopyPixels, похоже, справится с задачей, если вы правильно настроили среду.

...