2016-07-07 90 views
0

SDLGame Maker都具有表面和图像的概念,您可以随时修改并显示它们。我正在使用OpenGL 1,我想知道openGL是否具有Surface的这个概念。OpenGL中的雾化表面

,我想出的唯一办法是:

  • 每一帧创建/销毁根据需要一个新的纹理。
  • 每帧,根据需要更新所述纹理。

这些方法似乎不是很高效,但我看不到其他选择。也许这就是他们在上述引擎中的实现方式。

+0

你能否请我验证我的答案是否有帮助? – Harish

+0

嗯,我想我没有得到更多的答案。如果没有别的选择,那么我很高兴知道它。 – Agggg

回答

0

是的,这两个是你在OpenGL 1.0中做的方法。就1.0规范而言,我不认为有任何其他方法。 链接:https://www.opengl.org/registry/doc/glspec10.pdf

请注意纹理存储在快速访问阴影的设备内存(GPU)上。上述方法在主机(CPU)内存和设备内存之间复制。因此,性能命中率是主机设备复制的速度。

为什么只限于OpenGL 1.0规范。你可以走得更高,然后你开始有更多的选择。

  1. 使用GLSL着色器直接编辑一个纹理的内容并将其输出到另一个纹理。处理将在GPU上完成,并且设备设备拷贝速度将尽可能快。
  2. 使用CUDA。将纹理映射到CUDA阵列,使用您的内核修改内容。或者将OpenCL用于非NVIDIA卡。

只要修改可以并行执行,这将是更好的方案,这将是有益的。

我会建议尝试CPU复制方法,因为它可能足够满足您的需求。使用最新的硬件,主机设备拷贝速度更快。即使使用此副本,您也许能够获得实时60fps或更高的实时性,除非您计划执行此操作的很多纹理。