是否有可能在现代GPU上进行老派的2d复制?

问题描述 投票:12回答:6

看来GL已成为所有游戏平台(甚至是手持设备!)的主流。这已将现代GPU芯片组的部署推向了众多消费者。

这太神奇了。

现在有了现代GPU系统,是否有可能制作通用的老式图形编程(又名-使用VRAM将X rect转换为Y rect)? (想想Amiga)还是以运营为中心围绕顶点和像素着色器?

可以从GL访问吗? OpenGL ES?

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

opengl opengl-es gpu
6个回答
7
投票

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

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

将您的子画面保存在单独的帧缓冲区(可能使用OpenGL渲染)中,并将其设置为已读(使用glReadBuffers),然后在绘制帧缓冲区中将其变白(使用glDrawBuffers)。它非常简单,快速。


2
投票

嗯,您可以使用libSDL并获得指向屏幕帧缓冲区的指针,并对像素进行任何操作。或者,您也可以将所有图形绘制到内存缓冲区,加载到GL纹理并绘制纹理四边形,这可能是由于硬件加速而更快。


1
投票

[在某些嵌入式系统上可能会获取帧缓冲区指针并直接对其进行写入,但是如今,最好使用OpenGL | ES并渲染纹理。它将更加便携,并且可能更快。

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

这些天您可以使用着色器和可编程管线来实现惊人的工作。


1
投票

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


0
投票

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


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

© www.soinside.com 2019 - 2024. All rights reserved.