Мерцающий цвет фона - PullRequest
       12

Мерцающий цвет фона

0 голосов
/ 18 февраля 2019

Я создал окно OpenGL, используя SDL2, но фон продолжает переключаться между черным и желтым.

#include <SDL2/SDL.h>
#include <GL/glew.h>

#define SCREEN_WIDTH 500
#define SCREEN_HEIGHT 500

int main( int argc, char** argv )
    {
    SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
    SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 3 );
    SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );
    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
    SDL_GL_SetAttribute( SDL_GL_ACCELERATED_VISUAL, 1 );

    SDL_Window* gWindow = SDL_CreateWindow( 
        "Title", 
        SDL_WINDOWPOS_UNDEFINED, 
        SDL_WINDOWPOS_UNDEFINED, 
        SCREEN_WIDTH, 
        SCREEN_HEIGHT, 
        SDL_WINDOW_OPENGL);
    SDL_GL_CreateContext( gWindow );

    glewExperimental = GL_TRUE;
    glewInit();

    glPointSize(3);
    glClearColor(1,1,0,0);
    glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
    glClear(GL_COLOR_BUFFER_BIT);
    SDL_GL_SetSwapInterval(1);

    int quit=0;
    SDL_Event event;

    while( !quit )
        {
        while(SDL_PollEvent( &event ))
            {
            if( event.type == SDL_QUIT )
                quit = 1;
            }
        SDL_GL_SwapWindow( gWindow );
        }
    SDL_DestroyWindow(gWindow);
    return 0;
    }

Я ожидаю, что фон будет желтым, как определено с помощью glClearColor (1,1,0,0)без мерцания во время работы программы.Что-то не так в коде?

1 Ответ

0 голосов
/ 18 февраля 2019

Причиной мерцания является то, что вы используете двойную буферизацию, но не очищаете один из буферов с желтым цветом (т.е. обратите внимание, что вы вызываете glClear только один раз в своем коде).

Я предлагаю вам позвонить glClear каждый кадр.Чтобы исправить свой код, вы можете переместить вызов в цикл непосредственно перед SDL_GL_SwapWindow:

while( !quit )
{
    while(SDL_PollEvent( &event ))
    {
        if( event.type == SDL_QUIT )
            quit = 1;
    }

    glClear(GL_COLOR_BUFFER_BIT);
    SDL_GL_SwapWindow( gWindow );
}
...