OpenGL程序仅显示屏幕背后的内容

时间:2014-12-24 18:49:47

标签: c++ opengl

当我运行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();
}

它不会给出任何错误或警告,它只显示屏幕上已有的内容。我错过了什么?感谢。

1 个答案:

答案 0 :(得分:5)

glutInitDisplayMode (... GLUT_DOUBLE)告诉窗口系统使用双缓冲渲染,但代码中的任何地方都没有交换缓冲区调用。

基本上,当发生这种情况时,你总是会进入后台缓冲区,窗口系统只使用前缓冲区的内容绘制窗口。这样的想法是前缓冲区总是一个完成的图像,当你完成绘制框架后实际交换缓冲区时,它可以很好地工作。但是现在看来,你的前缓冲区总是未定义的。

要解决此问题,请在glutSwapBuffers ()的末尾添加对void display ()的通话。这将复制/交换后缓冲区和前缓冲区,以便渲染输出可见。