【发布时间】:2015-07-18 06:10:16
【问题描述】:
我有一些很大的性能问题here
所以我想在 gpu 端进行一些测量。
通过阅读thread,我围绕我的绘图函数编写了这段代码,包括 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 渲染命令应该是 asynchronous(驱动程序可以在将它们全部一起发送之前缓冲多达 X 个命令),我的问题基本上是:
上面的代码是正确的
我是正确的假设在新帧开始时,所有先前的 GL 命令(来自前一帧)都已在 gpu 上发送、执行和终止
我假设当我使用
glGetQueryObjectiv和GL_QUERY_RESULT获得查询结果时,到目前为止所有的GL 命令都已终止,这是对的吗?那就是OpenGL会等到结果可用(从线程)?
【问题讨论】:
标签: opengl gpu timing opengl-4 elapsedtime