在 Windows 7家庭终极上使用免费过剩与视频卡 ati mobility radeon 5650
代码段:
void ResizeFunction(int width, int height)
{
glViewport(0, 0, width, height);
}
void RenderFunction()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//...drawing code based on some flag, I draw a triangle or a rectangle
//the flag is toggled on pressing 't' or 'T' key
glutSwapBuffers(); //double buffering is enabled
glutPostRedisplay();
}
void KeyboardFunction(unsigned char key, int x, int y)
{
switch(key)
{
case 't':
case 'T':
{
flag = !flag;
glutPostRedisplay();
break;
}
default:
break;
}
}
问题:第一次绘制覆盖整个窗口的三角形或矩形。但是,如果我用另一个窗口部分覆盖过剩窗口(比如说,带有一些记事本窗口),然后将其揭开,随后,当我切换时,该对象仅在过剩窗口的被覆盖部分中被绘制。如果我重新调整过剩窗口的大小,绘图就像以前一样正常工作。
任何帮助将不胜感激。
的问候, FS
答案 0 :(得分:1)
Glut只会在您告诉它或决定时在屏幕上重绘。也就是说,如果您在窗口中没有执行任何操作,则不会重绘场景。优点:减少cpu / gpu的使用。缺点:仅适用于非动画应用程序。
如果您想要不断更新屏幕(这是在具有大量动画的应用程序(例如游戏)中完成的操作),您可以使用glutIdleFunc
http://www.opengl.org/resources/libraries/glut/spec3/node63.html
当你为glut设置所有函数时,就在程序的开头,你也写道:
glutIdleFunc(RenderFunction);
这样,当过剩时,它会一直调用你的渲染函数。
如果想要渲染得比较慢(例如使用固定的帧速率),可以使用计时器:
void RenderFunction()
{
glutTimerFunc(YOUR_DELAY_IN_MS, RenderFunction, 0);
/* rest of code */
}
而不是glutIdleFunc(RenderFunction);
,你写
`glutTimerFunc(YOUR_DELAY_IN_MS, RenderFunction, 0);`
简单地调用渲染函数一次(你也可以只编写一次RenderFunction()
)并且该函数会继续为下次运行设置计时器。
作为旁注,我建议使用SDL代替过剩。