当我运行OpenGL程序时,如果当前打开了一个文本编辑器,则opengl程序会在其屏幕上显示该部分。或打开Web浏览器后,opengl程序将显示该浏览器的一部分。这是我的主要功能:
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL Program");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
我的显示功能:
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
gluLookAt(posz,posy,posz, 0, 0, 0, upx, upy, upz);
glBegin(GL_TRIANGLES);
glVertex3f(-1.0f,-0.25f,0.0f);
glVertex3f(-0.5f,-0.25f,0.0f);
glVertex3f(-0.75f,0.25f,0.0f);
glEnd();
}
它不会给出任何错误或警告,它只会显示屏幕上已经存在的内容。我想念什么?谢谢。
glutInitDisplayMode (... GLUT_DOUBLE)
告诉窗口系统使用双缓冲渲染,但是在代码中的任何地方都没有交换缓冲区调用。
基本上,您总是会在发生这种情况时绘制到后缓冲区中,并且窗口系统仅使用前缓冲区的内容来绘制其窗口。这里的想法是,前缓冲区始终是一个完成的图像,当您在绘制完框架后实际交换缓冲区时,前缓冲区非常有用。但是就目前而言,您的前缓冲区始终是未定义的。
要解决此问题,请glutSwapBuffers ()
在的末尾添加一个呼叫void display ()
。这将复制/交换您的后缓冲区和前缓冲区,因此您呈现的输出是可见的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句