OpenGL何时会实际绘制我指示的内容?是在调用特定的绘图功能还是缓冲交换? 我想知道这是否可以做这样的事情:
SomeTimer Timer;
Timer.Start();
glDrawArrays(...);
long time = Timer.Stop();
查看绘图花费最多时间并根据其进行优化 如果重要:我只画了2d,没有模板/深度或任何其他缓冲测试。
答案 0 :(得分:2)
该代码不起作用。根据定义,OpenGL命令假定为行为异步。 GL命令必须在完成之前完全写入或读取任何参数。但除此之外,所有赌注都已关闭。
任何单个glDraw*
调用的时间将只告诉您函数调用完成所需的时间。它没有说明渲染完成所需的时间。
A more thorough discussion of this subject is available。
好处是你可以时间渲染,但你必须以OpenGL的方式进行渲染。 ARB_timer_query允许您完全执行此操作:确定OpenGL命令完成所需的时间,而不仅仅是OpenGL。这个扩展是OpenGL 3.3的核心,它可以广泛用于各种级别的硬件。几乎任何仍由其所有者支持的GPU都实现了这一点。