当我运行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();
}
它不会给出任何错误或警告,它只显示屏幕上已有的内容。我错过了什么?感谢。
答案 0 :(得分:5)
glutInitDisplayMode (... GLUT_DOUBLE)
告诉窗口系统使用双缓冲渲染,但代码中的任何地方都没有交换缓冲区调用。
基本上,当发生这种情况时,你总是会进入后台缓冲区,窗口系统只使用前缓冲区的内容绘制窗口。这样的想法是前缓冲区总是一个完成的图像,当你完成绘制框架后实际交换缓冲区时,它可以很好地工作。但是现在看来,你的前缓冲区总是未定义的。
要解决此问题,请在glutSwapBuffers ()
的末尾添加对void display ()
的通话。这将复制/交换后缓冲区和前缓冲区,以便渲染输出可见。