OpenGL程序主循环,为什么没有等待函数?
典型的Windows窗口程序,有一个消息循环,但是OpenGL的程序,这部分通常为:
[code=C]while(!done) // Loop That Runs While done=FALSE
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
{
if (msg.message==WM_QUIT) // Have We Received A Quit Message?
{
done=TRUE; // If So done=TRUE
}
else // If Not, Deal With Window Messages
{
TranslateMessage(&msg); // Translate The Message
DispatchMessage(&msg); // Dispatch The Message
}
}
else // If There Are No Messages
{
// Draw The Scene. Watch For ESC Key And Quit Messages From DrawGLScene()
if ((active && !DrawGLScene()) || keys[VK_ESCAPE]) // Active? Was There A Quit Received?
{
done=TRUE; // ESC or DrawGLScene Signalled A Quit
}
else // Not Time To Quit, Update Screen
{
SwapBuffers(hDC); // Swap Buffers (Double Buffering
}
}
}[/code]
上面代码,DrawGLScene()是自定义的渲染函数。平时要是没有窗口消息,PeekMessage()返回False,程序会不断的循环执行DrawGLScene()或SwapBuffers(),这理论上就是死循环了。
但是实际上,OpenGL的程序框架大体都是这个样子,而且执行的很好,并没有CPU占用100%的现象。请问大家这是为什么?是不是OpenGL内部有系统资源占用自动协调机制?
我刚开始学OpenGL,对于这些还不是太清楚,请大家不吝赐教。