//跟踪帧数
int frame = 0;
//计算帧率的计时器
Timer fps;
//更新标题的计时器
Timer update;
这是我们的帧率测试程序中的3个关键变量。其中,"frame"跟踪了已经渲染了多少帧,"fps"是跟踪渲染已用时间的计时器,"update"是我们用来更新标题的计时器,标题内容就是我们要展示的帧率。
//启动update计时器
update.start();
//启动frame计时器
fps.start();
//当用户还没退出
while( quit == false )
{
当所有初始化完毕并且加载完成后,我们启动计时器,然后进入主循环。
//当有事件需要处理
while( SDL_PollEvent( &event ) )
{
//如果用户单击了窗口右上角的关闭按钮
if( event.type == SDL_QUIT )
{
//退出程序
quit = true;
}
}
这里没有高级的事件处理,我们仅仅处理了用户的关闭操作。
//应用表面
apply_surface( 0, 0, image, screen );
//更新窗口
if( SDL_Flip( screen ) == -1 )
{
return 1;
}
//增加帧计数器的值
frame++;
处理了事件后,我们应用了表面,更新了窗口,然后增加了帧计数器的值。
//自从标题上次更新已经过了1秒
if( update.get_ticks() > 1000 )
{
//以string形式表示的帧率
std::stringstream caption;
//计算帧率并创建string
caption << "Average Frames Per Second: " << frame / ( fps.get_ticks() / 1000.f );
//重置标题
SDL_WM_SetCaption( caption.str().c_str(), NULL );
//重启update计时器
update.start();
}
}
这里是我们展示帧率的代码。
首先我们检查一下自从上次更新标题到现在是否至少经过了1秒。
如果是时候更新标题,我们创建一个string stream对象,并将帧率信息放入其中。
帧率是通过帧数除以渲染时间(以秒为单位)计算出来的。
我们更新了标题后,继续运行我们的帧率测试程序。
首先我们检查一下自从上次更新标题到现在是否至少经过了1秒。
如果是时候更新标题,我们创建一个string stream对象,并将帧率信息放入其中。
帧率是通过帧数除以渲染时间(以秒为单位)计算出来的。
我们更新了标题后,继续运行我们的帧率测试程序。