OpenGL绘图时间

OpenGL绘图时间,opengl,Opengl,OpenGL什么时候真正绘制我指示它绘制的东西?是调用特定绘图功能还是缓冲区交换? 我想知道这一点,看看我是否能做到: SomeTimer Timer; Timer.Start(); glDrawArrays(...); long time = Timer.Stop(); 查看哪个绘图花费的时间最多,并在此基础上进行优化。 如果有关系的话:我只在2d中绘制,没有模具/深度或任何其他缓冲测试。该代码将无法工作。根据定义,OpenGL命令在行为上被假定为异步的。GL命令在完成之前必须完全写入或读

OpenGL什么时候真正绘制我指示它绘制的东西?是调用特定绘图功能还是缓冲区交换?
我想知道这一点,看看我是否能做到:

SomeTimer Timer;

Timer.Start();
glDrawArrays(...);
long time = Timer.Stop();
查看哪个绘图花费的时间最多,并在此基础上进行优化。

如果有关系的话:我只在2d中绘制,没有模具/深度或任何其他缓冲测试。

该代码将无法工作。根据定义,OpenGL命令在行为上被假定为异步的。GL命令在完成之前必须完全写入或读取任何参数。但除此之外,所有的赌注都没有了

对任何一个
glDraw*
调用进行计时都只会告诉您完成该函数调用所需的时间。它没有说明渲染完成所需的时间

A

好处是,您可以进行时间渲染,但必须按照OpenGL的方式进行。允许您准确地完成:完成OpenGL命令所需的时间,而不仅仅是提供给OpenGL。这个扩展是OpenGL3.3的核心,可以广泛地用于各种级别的硬件。几乎所有仍由其所有者支持的GPU都实现了这一点