2017-06-28 9 views
1

私はsdlとopenglコースを開始しました。私は1つの問題をバックグラウンドを変更しようとすると、この関数は何も結果を与えていません。私はMSVSとWin8.1を使用しています。 私はパラメータでさまざまなオプションを使用しようとしていました。私はいつも黒い背景があります。私は間違って何をすることができるすべてのアイデア?glClearColorが動作しません

#include <SDL.h> 
#include <SDL_opengles2.h> 
#include <GLES3/gl3.h> 
#include <cstdio> 
#include <cstdlib> 

const unsigned int DISP_WIDTH = 800; 
const unsigned int DISP_HEIGHT = 600; 

int SDL_main(int argc, char *args[]) { 
// ##### FIXME! ##### 
SDL_Window *window = NULL; 
SDL_GLContext context = NULL; 

if (SDL_Init(SDL_INIT_VIDEO) < 0) { 
    SDL_Log("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); 
    return 10; 
} 

atexit(SDL_Quit); 

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_ES); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,0); 

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 

window = SDL_CreateWindow("Tut", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, DISP_WIDTH, DISP_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); 

if (!window) { 
    SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error","Couldn't create the main window",NULL); 
    return EXIT_FAILURE; 
} 

context = SDL_GL_CreateContext(window); 

if (!context) { 
    SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", "Couldn't create an OpenGl context", NULL); 
    return EXIT_FAILURE; 
} 

glClearColor(0.5F, 0.0F, 1.0F, 0.5F); // this function changes the color 
glClear(GL_COLOR_BUFFER_BIT); 

SDL_GL_SwapWindow(window); 
bool quit = false; 

while (!quit) { 
    SDL_Event event; 
    if (SDL_WaitEvent(&event) != 0) { 
     if (event.type == SDL_QUIT) { 
      quit = true; 
     } 
    } 

} 

return EXIT_SUCCESS; 

}

+0

コースへのリンク:[link](https://keasigmadelta.com/store/wp-content/uploads/2017/03/GLES3-and-SDL2-Tutorials.pdf) – Sewer

+0

gernealヒントは 'glGetError () 'をレンダリングキューに少なくとも1回入れて、間違っているかどうかを確認してください。 https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glGetError.xhtml – OutOfBound

+0

プログラムはウィンドウの初期化を何もしません。特に、ここで問題になるかもしれないディスプレイをリフレッシュしません。あなたのプログラムが頻繁にディスプレイを更新しなくても、[SDL_WINDOWEVENT](https://wiki.libsdl.org/SDL_WindowEvent)を受け取ったときにディスプレイをリフレッシュさせる必要があります。または、1秒間に数回表示を更新する予定です。この場合、SDL_WINDOWEVENTで更新する必要はありませんが、メインループでレンダリングを実装するまでは何も表示されません。 – spectras

答えて

0

あなたは、ループ内の任意の時点でバッファを交換していません。関連するすべての呼び出しを行った後にバッファを交換する必要があります。そうしないと、ディスプレイは更新されません。

関連する問題