所以我想在 gpu 方面进行一些测量。
通过阅读这个线程,我围绕我的绘图函数编写了这段代码,包括 gl 错误检查和 swapBuffers()(确实禁用了自动交换)
gl4.glBeginQuery(GL4.GL_TIME_ELAPSED, queryId[0]);
{
draw(gl4);
checkGlError(gl4);
glad.swapBuffers();
}
gl4.glEndQuery(GL4.GL_TIME_ELAPSED);
gl4.glGetQueryObjectiv(queryId[0], GL4.GL_QUERY_RESULT, frameGpuTime, 0);
而且由于 OpenGL 渲染命令应该是异步的(驱动程序可以在将它们全部发送到一起之前缓冲多达 X 个命令),我的问题基本上是:
上面的代码是正确的
我是对的,假设在新帧开始时,所有先前的 GL 命令(来自前一帧)都已在 gpu 上发送、执行和终止
我假设当我得到查询结果
glGetQueryObjectiv
并且GL_QUERY_RESULT
到目前为止所有 GL 命令都已终止时,我是对的?那就是OpenGL会等到结果可用(从线程)?