我有一些绘制场景的例程,然后我交换缓冲区,并且由于我将交换等待设置为 1,因此调用可能会阻塞等待垂直同步。
是否可以测量绘制场景花费了多少时间,以及等待垂直同步花费了多少时间?我尝试执行以下操作:
start = clock();
drawstuff();
glFinish();
end = clock();
SwapBuffers();
swapend = clock();
但它似乎不起作用,至少对我的硬件和驱动程序来说,因为end
和swapend
总是一样的。
你的时钟分辨率不够。使用std::chrono
、boost::chrono
或 平台特定的时钟。
示例(ideone):
#include <chrono>
#include <thread>
#include <iostream>
using std::chrono::high_resolution_clock;
using std::chrono::duration_cast;
using std::chrono::nanoseconds;
using std::chrono::microseconds;
typedef std::chrono::high_resolution_clock myclock;
typedef myclock::time_point time_point;
typedef myclock::duration duration;
auto time_to_wait = microseconds(1000);
inline void doStuff()
{
std::this_thread::sleep_for(time_to_wait);
}
int main()
{
time_point start, end;
start = myclock::now();
doStuff();
end = myclock::now();
auto elapsed = duration_cast<microseconds>(end - start);
std::cout << elapsed .count() << " microseconds elapsed\n";
}
笔记:
glFinish()
std::chrono
. 使用boost::chrono
或QueryPerformanceCounter
代替。