我有一些绘制场景的例程,然后交换缓冲区,因为我将交换等待设置为1,调用可能会阻止等待垂直同步。
是否可以测量绘制场景所花费的时间,以及等待垂直同步的时间?我试着做以下事情:
start = clock();
drawstuff();
glFinish();
end = clock();
SwapBuffers();
swapend = clock();
但它似乎不起作用,至少在我的硬件和驱动程序上,因为end
和swapend
始终是相同的。
答案 0 :(得分:0)
你的时钟分辨率不够。使用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
。