Versuch mit SDL1.3 und OpenGL 3.2 zeigt nur schwarzes Bild



  • Hallo zusammen,

    ich möchte mich die nächste Zeit mit OpenGL3.x beschäftigen und erst garnicht mit den "alten" Befehlen wie glBegin etc. anfangen. Um später mit Eingaben und auch Sound plattformunabgängig sein zu können habe ich SDL1.3 dazu gewählt.

    Nun wollte ich mir ein Grundgerüst bauen, aber anstelle des erwarteten roten Hintergrundes sehe ich nur schwarz, was habe ich falsch gemacht?

    Ich habe den Code auf das wesentliche gekürzt.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    
    #define GL3_PROTOTYPES 1
    #include <GL3/gl3.h>
    
    #include <SDL.h>
    
    .
    .
    .
    
    int main(int argc, char *argv[]){
        SDL_Window *window; 
        SDL_GLContext gl_context;
    
        if (SDL_Init(SDL_INIT_VIDEO) < 0) 
            ck_sdl_error("SDL_Init");
    
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
    
        SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
        SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 32);
    
        window = SDL_CreateWindow("cfoobar opengl", SDL_WINDOWPOS_CENTERED, 
    	                          SDL_WINDOWPOS_CENTERED, 640, 480, 
    							  SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
        if (!window){
            ck_sdl_error("SDL_CreateWindow");
    	}
    
        gl_context = SDL_GL_CreateContext(window);
    	if (!gl_context) {
    		ck_sdl_error("SDL_GL_CreateContext");
    	}
    
        SDL_GL_SetSwapInterval(1);
    
        glClearColor ( 1.0, 0.0, 0.0, 1.0 );
        glClear ( GL_COLOR_BUFFER_BIT );
        if(glGetError()){
    		ck_sdl_error("glClear");
    	}
    
        SDL_GL_SwapWindow(window);
    
        SDL_Delay(3000);
    
        SDL_GL_DeleteContext(gl_context);
        SDL_DestroyWindow(window);
        SDL_Quit();
    
        return 0;
    }
    


  • Ich fange jetzt auch erst mit Opengl an. Aber ich würde sagen es liegt an folgender Zeile:

    [code]
    glClearColor ( 1.0, 0.0, 0.0, [b]1.0[/b] );
     [/code]
    

    Du hast den Alphawert auf 100% gesetzt. D.h. deine Farbe ist komplett durchsichtig. Setzte den letzten Wertm auf 0. Dann müsste es gehen. Ich habe es allerdings nicht selbst getestet.



  • Danke für deine Antwort, daran lag es nicht. Ich arbeite jetzt auch mit GLFW anstelle von SDL und ich glaube der Fehler lag in der falschen OGL Version. Unter Windows konnte ich nur mit 3.1 arbeiten und unter Linux dann mit 3.2.

    Die RGBA Werte für die Löschfarbe habe ich nicht verändert und es hat auch mit einem anderen OGL-Contex auf 3.1 bzw. 3.2 unter Linux so funktioniert.

    Gruß Chris


Anmelden zum Antworten