在OpenGL中模糊表面

时间:2016-07-07 10:32:49

标签: opengl sdl surface game-maker render-to-texture

SDLGame Maker都有表面,图像的概念,您可以动态修改并显示它们。我正在使用OpenGL 1,我想知道openGL是否具有Surface的概念。

我想出的唯一方法是:

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

这些方法似乎不是很有效,但我认为别无选择。也许这就是它们在上述引擎中的实现方式。

1 个答案:

答案 0 :(得分: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卡。
  3. 这将是更好的方案,只要修改可以并行执行,这将有益。

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