看来GL已成为所有游戏平台(甚至是手持设备!)的主流。这已将现代GPU芯片组的部署推向了众多消费者。
这太神奇了。
现在有了现代GPU系统,是否有可能制作通用的老式图形编程(又名-使用VRAM将X rect转换为Y rect)? (想想Amiga)还是以运营为中心围绕顶点和像素着色器?
可以从GL访问吗? OpenGL ES?
渲染带纹理的四边形是可以的,但是需要双重缓冲并重新渲染整个场景。正在查看我是否可以避免这种情况。
检查glBlitFramebuffer例程(Framebuffer Object)。您需要更新的驱动程序。
请记住,您仍然可以使用默认的帧缓冲,但是我认为使用帧缓冲对象会更有趣。
将您的子画面保存在单独的帧缓冲区(可能使用OpenGL渲染)中,并将其设置为已读(使用glReadBuffers),然后在绘制帧缓冲区中将其变白(使用glDrawBuffers)。它非常简单,快速。
嗯,您可以使用libSDL并获得指向屏幕帧缓冲区的指针,并对像素进行任何操作。或者,您也可以将所有图形绘制到内存缓冲区,加载到GL纹理并绘制纹理四边形,这可能是由于硬件加速而更快。
[在某些嵌入式系统上可能会获取帧缓冲区指针并直接对其进行写入,但是如今,最好使用OpenGL | ES并渲染纹理。它将更加便携,并且可能更快。
您可以在主内存中创建一个缓冲区,进行所有想要的操作,然后将其渲染为纹理。您可以将纹理数据DMA到VRAM以提高速度,然后将其渲染为四边形,这等效于blit,但不使用任何CPU周期,并且运行速度与GPU可以处理的速度一样。
这些天您可以使用着色器和可编程管线来实现惊人的工作。
如果您要绘制带纹理的四边形,可以轻松地模拟“老式”斑点,那么实际上像素是由GPU从视频内存中复制的。还请注意,虽然在OpenGL中可以进行位图操作,但它们可能会非常缓慢,因为3D路径是在消费级视频卡上优化的,而2D路径可能不是。
此外,如果正确设置了环境,则glCopyPixels似乎可以解决问题。
在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