2015-03-10 4 views
0

У меня есть очень простой код OPENGL:glClear иногда работает, а иногда нет

screen.cpp

#include <GL/glew.h> 
#include <GL/freeglut.h> 
#include <GL/gl.h> 

#include <iostream> 

#define WIDTH 683 
#define HEIGHT 384 

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

void display() { 
    glClear(GL_COLOR_BUFFER_BIT); 
    glutSwapBuffers(); 
} 

int main(int argc, char* argv[]) { 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowSize(WIDTH, HEIGHT); 
    glutCreateWindow("test"); 
    glutDisplayFunc(display); 

    GLenum res = glewInit(); 
    if (res != GLEW_OK) { 
     std::cout<<"Error: "<<glewGetErrorString(res)<<std::endl; 
     return 1; 
    } 

    init(); 
    glutMainLoop(); 

    return 0; 
} 

вещь странно этот код иногда работает, а иногда нет. Я ожидаю получить белый пустой экран, и когда я запускаю эту программу, случайным образом и чаще, я просто получаю прозрачный экран, показывающий, что было до того, как программа была запущена. Иногда программа работает правильно и показывает мне пустой белый экран. В чем проблема?

скомпилирован с: г ++ -o экран screen.cpp -g -Wall -std = C++ 11 -lGLEW -lglut -lGL

ответ

0

это альфа вы указываете в clearColor, 0 означает прозрачный, изменить его до 1, и это будет правильный пустой экран.

+0

Причина, по которой я его отключил, состояла в том, что я не установил GLUT_ALPHA в glutInitDisplayMode(). Я установил его как 1, и он все еще производит непоследовательные результаты. – user3064869

+0

Это не изменит ситуацию. Значение альфа-компонента в прозрачном цвете определяет только значение, которое записывается в альфа-компонент в фреймбуфере. Это не изменяет то, что отображается на экране, это имеет значение только при использовании смешивания. И если вы используете смешивание, вы обычно ** хотите ** очистить альфу до нуля. –

Смежные вопросы