【问题标题】:Blitting surfaces in OpenGLOpenGL中的blitting表面
【发布时间】:2016-07-07 10:32:48
【问题描述】:

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

我想出的唯一方法是:

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

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

【问题讨论】:

  • 您能否验证我的回答是否有帮助?
  • 好吧,我想我没有得到更多答案。如果没有其他选择,那么我很高兴知道它。

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


【解决方案1】:

是的,这两种方式是您在 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 或更高的实时速度,除非您计划为其执行大量纹理。

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多