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

jas*_*son 1 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;
} 
Run Code Online (Sandbox Code Playgroud)

我的显示功能:

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();
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*man 5

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

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

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