c++ - OpenGL命令的执行顺序

标签 c++ opengl fbo render-to-texture

我有一个程序,我使用着色器程序渲染到附加到 FBO 的纹理,然后更改程序的参数(通过更改制服的值)并在将其附加到 FBO 后渲染到第二个纹理。然后使用两个渲染图像生成第三个图像。

我不确定我得到的结果是否正确。据我了解,GPU 可以自由选择执行 OpenGL 命令的时间。但只要执行顺序确实遵循命令在代码中出现的顺序,这就不应该成为问题。事实真的是这样吗?

后续问题。我需要将生成的帧保存到磁盘。我知道该怎么做。但在这样做之前我需要确保 GPU 已经完成渲染。我该如何强制执行?

最佳答案

OpenGL 将按照命令发出的顺序执行命令(或者至少模拟这种行为)。这意味着,依次使用 2 个不同的 FBO 是没有问题的。这也意味着 OpenGL 将确保在您从 FBO 获取结果时渲染已完成。

您可以调用 glFinish() 让程序等待,直到管道处理完所有挂起的 OpenGL 命令,但这在几乎所有情况下都是不必要的。

关于c++ - OpenGL命令的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696150/

相关文章:

opengl - 多重采样 FBO 深度/模板和 OpenGL 规范

c++ - 将窗口内容显示为位图

c++ - 错误 : missing type specifier - int assumed. C++ 不支持默认 int

c++ - 在后台执行功能?我需要为此线程吗? C++

c++ - OpenGL + SDL绕局部轴旋转

javascript - THREE.js 中的着色器 Material 和 GL 帧缓冲区

c++ - 使用帧缓冲区缩放纹理

C++从字符串创建二元组

c++ - gluProject 和 glhProject 之间有什么区别?

opengl - 使用glew和glfw为opengl设置cmake标志