我有一个程序,我使用着色器程序渲染到附加到FBO的纹理然后更改程序的参数(通过更改制服的值)并在将其附加到FBO后渲染到第二个纹理。然后使用两个渲染图像来生成第三个。
我不确定我得到的结果是否正确。我知道GPU可以自由选择执行OpenGL命令的时间。但是,只要执行顺序遵循命令在代码中出现的顺序,那就不应该成为问题。实际情况如此吗?
后续问题。我需要将生成的帧保存到磁盘。我知道怎么做。但是我需要确保GPU在完成渲染之前完成渲染。我该如何强制执行?
答案 0 :(得分:2)
OpenGL将按照发出的顺序执行命令(或至少模拟此行为)。这意味着,一个接一个地使用2个不同的FBO没有问题。这也意味着OpenGL将确保您在从FBO获得结果时完成渲染。
您可以调用glFinish()
让程序等到管道处理完所有待处理的OpenGL命令,但几乎在所有情况下都不需要这样做。