所以当你调用opengl函数时,比如glDraw或gLBufferData,是否会导致程序的线程停止并等待GL完成调用?
如果没有,那么GL如何处理调用像glDraw这样的重要函数,然后立即改变一个影响绘制调用的设置?
不,他们(大多数)没有.大多数GL函数在使用时进行缓冲,并在以后实际执行.这意味着您无法将CPU和GPU视为两个处理器同时协同工作.通常,CPU执行一系列缓冲的GL函数,一旦它们被传递到GPU,它就会执行它们.这意味着只需比较执行前后的时间,就无法可靠地控制特定GL函数执行所需的时间.
如果你想这样做,你需要首先运行一个glFinish(),这样它实际上会等待所有先前缓冲的GL调用执行,然后你可以开始计数,执行你想要基准的调用,再次调用glFinish确保执行这些调用,然后完成基准测试.
另一方面,我说"大多数".这是因为读取函数实际上需要与GPU同步以显示实际结果,因此,在这种情况下,它们等待并冻结主线程.
编辑:我认为解释本身会回答你问的第二个问题,但是以防万一:所有调用都被缓冲的事实使得绘制首先完成,然后为了成功的调用更改设置