我有一个程序,我使用着色器程序渲染到附加到 FBO 的纹理,然后更改程序的参数(通过更改制服的值)并在将其附加到 FBO 后渲染到第二个纹理。然后使用两个渲染图像生成第三个图像。
我不确定我得到的结果是否正确。据我了解,GPU 可以自由选择执行 OpenGL 命令的时间。但只要执行顺序确实遵循命令在代码中出现的顺序,这就不应该成为问题。事实真的是这样吗?
后续问题。我需要将生成的帧保存到磁盘。我知道该怎么做。但在这样做之前我需要确保 GPU 已经完成渲染。我该如何强制执行?
最佳答案
OpenGL 将按照命令发出的顺序执行命令(或者至少模拟这种行为)。这意味着,依次使用 2 个不同的 FBO 是没有问题的。这也意味着 OpenGL 将确保在您从 FBO 获取结果时渲染已完成。
您可以调用 glFinish()
让程序等待,直到管道处理完所有挂起的 OpenGL 命令,但这在几乎所有情况下都是不必要的。
关于c++ - OpenGL命令的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696150/