畫面播放速率也是一個熟悉的話題,畫面播放速率通常指動畫運行時每秒的幀數。對於相同的應用來說,畫面播放速率通常是衡量電腦效能高低的一個指標,特別是顯卡。而很多OpenGL的應用由於涉及到3D處理,紋理貼圖等,更可以檢驗顯卡效能的高低。正因為如此,從Quake、Quake2到Quake3一直都是發燒友測試機器和顯卡效能的工具之一。
事實上,只要在程式中加入一個簡單的幾行代碼就可以實現畫面播放速率的測試功能了。
TCHAR szFPS[MAX_LOADSTRING]; //表示畫面播放速率字串
void CalculateFrameRate()
{
static float framesPerSecond = 0.0f; //幀計數器
static float lastTime = 0.0f;
//將毫秒轉換成秒
float currentTime = GetTickCount() * 0.001f;
// 累加幀計數器
++framesPerSecond;
// 如果目前時間和上次記錄的時間差大於1秒
if( currentTime - lastTime > 1.0f )
{
//將上一次的記錄時間設成目前時間
lastTime = currentTime;
//記入szFPS全域變數
sprintf(szFPS, "Current Frames Per Second: %d", int(framesPerSecond));
// 對幀計數器進行複位
framesPerSecond = 0;
}
}
int glMain(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-0.5, -0.5, -3.5);
//使用這種方法取代前面的通過WM_KEYDOWN訊息帶的wParam來判斷鍵盤訊息
if(keys[VK_ESCAPE]) //ESC鍵退出
return FALSE;
if (keys[VK_F1]) //F1鍵切換視窗模式
{
keys[VK_F1]=FALSE;
glShutdown();
fullscreen=!fullscreen;
if (!InitInstance(WIDTH, HEIGHT, BITS))
{
return 0;
}
}
//繪製1000個三角形
for(int i=0; i<1000; i++)
{
glBegin(GL_TRIANGLES);
glColor3ub(rand()%256, rand()%256, rand()%256);
glVertex3s(rand()%3, rand()%3, 0);
glColor3ub(rand()%256, rand()%256, rand()%256);
glVertex3s(rand()%3, rand()%3, 0);
glColor3ub(rand()%256, rand()%256, rand()%256);
glVertex3s(rand()%3, rand()%3, 0);
glEnd();
}
CalculateFrameRate();
glColor3f(1.0, 0.0, 0.0);
glRasterPos2f(-1.0f, 0.35f);
glPrint(g_Base, szFPS);
SwapBuffers(g_hDC);
return TRUE;
}
程式運行效果11-2所示,在320X240X16位色的視窗模式下,在PIII 866的機器上畫面播放速率基本穩定在22左右,在全螢幕模式下穩定在23。通過這個程式也可以看到,當處於全螢幕模式時,程式啟動並執行的確要快一些,當然在我們這個簡單的程式中並不那麼明顯。