12

看起来 GL 已经成为所有游戏平台(甚至是手持设备!)的主流,这推动了现代 GPU 芯片组的部署给大量消费者。

这真太了不起了。

现在有了现代 GPU 系统,是否可以进行通用的老式图形编程(又名 - 使用 VRAM 从 X rect 到 Y rect 的 blit)?(想想 Amiga)还是以顶点和像素着色器为中心的操作?

这可以从 GL 访问吗?OpenGL ES?

渲染一个带纹理的四边形是可以的,但它需要双缓冲和整个场景的重新渲染。正在看我是否可以避免这种情况。

4

6 回答 6

7

检查glBlitFramebuffer例程(Framebuffer Object)。您需要更新的驱动程序。

请记住,您仍然可以使用默认帧缓冲区,但我认为使用帧缓冲区对象会更有趣。

将您的精灵保存在单独的帧缓冲区中(可能使用 OpenGL 渲染),并将它们设置为已读(使用 glReadBuffers)并在绘制帧缓冲区(使用 glDrawBuffers)上对它们进行 blit。它非常简单和快速。

于 2010-03-02T17:55:29.107 回答
2

好吧,您可以使用libSDL并获取指向屏幕帧缓冲区的指针,然后对像素做任何您想做的事情。或者您可以将所有绘图都写入内存缓冲区,加载到 GL 纹理并绘制纹理四边形,这可能由于硬件加速而更快。

于 2010-02-28T11:24:46.047 回答
1

在某些嵌入式系统上可能会获得一个帧缓冲区指针并直接写入它,但现在最好使用 OpenGL|ES 并渲染纹理。它将更便携,并且可能更快。

你可以在主内存中创建一个缓冲区,做所有你想做的事情,然后将它渲染为纹理。您可以将纹理数据 DMA 到 VRAM 以提高速度,然后将其渲染为四边形,这相当于 blit,但不使用任何 CPU 周期并且运行速度与 GPU 可以处理的速度一样快。

如今,您可以使用着色器和可编程管道做的事情令人惊讶。

于 2010-02-28T11:43:31.867 回答
1

如果您正在绘制带纹理的四边形,您可以使用它轻松模拟“老派”blitting,那么实际上这些像素是由 GPU 从视频内存中复制的。另请注意,虽然位图操作在 OpenGL 中是可能的,但它们可能会非常缓慢,因为 3D 路径在消费级视频卡上进行了优化,而 2D 路径可能不是。

于 2010-03-01T10:14:32.480 回答
0

此外,如果您正确设置了环境,glCopyPixels 似乎可以解决问题。

于 2010-03-08T07:11:19.313 回答
0

在 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

于 2015-08-05T00:22:06.620 回答