为什么glClear不清除我的屏幕?

xzh*_*zhu 6 c opengl

这是一个简单的opengl程序.在绘制三角形之前,我正试图清除屏幕.我在我的init()函数中调用了glClear(),但它似乎无法清除屏幕.

#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

void myIdleFunc()
{
    glBegin(GL_TRIANGLES);
    {
        glColor3f(1.0f, 1.0f, 1.0f);
        glVertex2f(0.0f, 1.0f);
        glVertex2f(-1.0f, -1.0f);
        glVertex2f(1.0f, -1.0f);
    }
    glEnd();

    glFlush();

    usleep(1000000);
}

void init()
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutCreateWindow("Hello, World!");

    init();

    glutIdleFunc(myIdleFunc);
    glutMainLoop();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

这是一个屏幕截图,文本来自后面的gnome终端.

在此输入图像描述

Ben*_*igt 4

你的显示回调在哪里?您不应该使用空闲函数进行绘图。

所有绘图都需要在适当的回调中进行,GL 上下文可能在glutMainLoop开始运行之前才处于活动状态,并且如果没有活动上下文,您的命令就会被忽略(如果没有上下文,甚至可能没有地方存储用于检索的错误)和glGetError)。

注意:通常您希望在每帧开始时清除缓冲区。使用单缓冲可能只需要清除一次,但双缓冲更好,并且需要您以某种方式渲染每次交换之间的整个区域。