【问题标题】:OpenGL: Fast off-screen renderingOpenGL:快速离屏渲染
【发布时间】:2010-09-17 21:13:57
【问题描述】:

我需要使用 OpenGL 在屏幕外渲染大量(数万)图像。
我在 Windows 下运行并使用 QT 作为框架。解决方案只能是windows,没关系。

根据我使用 Google 的发现,有很多选项可以做到这一点 This article 似乎相当过时,提出了一些方法,其中相关的是:

  • Windows 特定 - 使用 CreateDIBSection 并以某种方式将纹理绑定到它。
  • 使用我的卡上似乎支持的 pbuffers 扩展。

This thread(消息 6)建议使用 QGLWidget::renderPixmap 执行此操作的 QT 特定方式

我的问题是 - 哪一个是最快的方式? pbuffers 似乎是最安全的选择,因为它保证在硬件上执行但不是使用 CreateDIB 方法也通过硬件? QT方法呢?这似乎存在一些上下文创建问题。我当然不想为我创建的每个图像都创建一个新的上下文。
有没有人有这方面的一些好的经验?


编辑:回复评论 -
我有一个不变的场景,根本没有改变,我从许多不同的角度渲染它。现在,图像会返回给用户并由 CPU 处理。将来可能会在 GPU 上进行处理。

【问题讨论】:

  • 图片来自哪里?您是否一遍又一遍地渲染同一个场景,也许是从不同的角度?或者你是从磁盘加载纹理后的纹理吗?图像去哪里了?进入 GPU 计算?到磁盘上?你的答案取决于细节。
  • 已在问题中回答
  • 也许这个链接有用,这里我使用了带有QGLFrameBufferstackoverflow.com/questions/19934102/…的帧缓冲对象

标签: performance opengl 3d rendering off-screen


【解决方案1】:

使用FBO。与 pbuffers 相比,它快速、便携且易于使用。

编辑:为了获得最佳性能,在两个不同的 FBO 之间交替渲染:

  1. 呈现给 A
  2. 渲染到 B
  3. 从 A 读回并处理它
  4. 呈现给 A
  5. 从 B 回读
  6. 转到 2

这样,您可以读回一个 FBO,然后在 GPU 并行渲染到另一个 FBO 时对其进行处理。

【讨论】:

  • 是的,我刚刚阅读了有关 FBO 的信息。在两种声音之间交替听起来是个好主意。您知道渲染到纹理和渲染到 RenderBuffer 之间是否有区别?哪个更快?
  • 最好渲染到渲染缓冲区; if 可能会更快,当然也不会更慢。
  • 另一个涉及使用 FBO 进行屏幕外渲染的问题:stackoverflow.com/questions/14785007/….
  • 不回答问题。
猜你喜欢
  • 2018-06-11
  • 2011-04-20
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2014-01-12
相关资源
最近更新 更多