我有一些严重的性能问题在这里。
因此,我想在gpu方面进行一些测量。
通过阅读这个线程,我在我的绘图函数周围编写了这段代码,包括gl错误检查和swapBuffers()(自动交换确实已被禁用)。
因此,我想在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会等待结果可用(来自线程)?