Textur geht nicht [OpenGL + SDL]



  • Irgendetwas beim Laden bzw. Anzeigen einer Textur in meinem SLD-Programm mit OpenGL funktioniert nicht.

    Mein Hauptprogramm beinhaltet:

    GLuint meine_textur = LadeTextur("gfx/mauer.bmp");
    if(meine_textur == 0) return 0;
    //...
    glEnable(GL_TEXTURE_2D);
    //...
    glBindTexture(GL_TEXTURE_2D, meine_textur);
    glBegin(GL_QUADS);
       glTexCoord2f(0.0f, 0.0f); glVertex3f(0.0f, 1.0f, -1.0f);
       glTexCoord2f(1.0f, 0.0f); glVertex3f(0.0f, 1.0f, 1.0f);
       glTexCoord2f(1.0f, 1.0f); glVertex3f(0.0f, -1.0f, 1.0f);
       glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, -1.0f, -1.0f);
    glEnd();
    

    Die Funktion LadeTextur:

    GLuint LadeTextur(char *dateiname)
    {
       // Bild laden
       SDL_Surface *Bild = SDL_LoadBMP(dateiname);
       if(!Bild) return 0;
       SDL_Surface *Konv = SDL_CreateRGBSurface(SDL_SWSURFACE, Bild->w, Bild->h, 32, 
                                  #if SDL_BYTEORDER == SDL_BIG_ENDIAN
                                           0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
                                  #else
                                           0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
                                  #endif
       SDL_BlitSurface(Bild, 0, Konv, 0);
       // Textur erstellen
       GLuint textur;
       glGenTextures(1, &textur);
       glBindTexture(GL_TEXTURE_2D, textur);
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);    // zum Strecken und Stauchen den Filter GL_LINEAR ...
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);    // ... benutzen (sparsamer: GL_NEAREST)
       glTexImage2D(GL_TEXTURE_2D, 0, 3, Konv->w, Konv->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, Konv->pixels); 
       // Bereinigen und Zurückgeben
       SDL_FreeSurface(Bild);
       SDL_FreeSurface(Konv);
       return textur;
    }
    

    Warum wird die Textur nicht angezeigt? Der Code ist eigentlich so wie in 'nem SDL-Tutorial.



  • 1. Was wird angezeigt?
    2. Welche Größe hat die Textur?
    3. Du überprüfst nirgendwo, ob OpenGL-Befehle fehlschlagen (glGetError!)



  • 1. Angezeigt wird wird ein entsprechendes Rechteck in der zuletzt aufgewählten Farbe.
    2. 128*128
    3. glGetError() liefert immerzu den Wert 1282. Was bedeutet das? Dast ist aber schon beim Programmstart so.



  • Ah, ich glaube ich habe den Fehler gefunden. Ich rufe LadeTextur() schon vor der Initialisierung von OpenGL auf. Rufe ich es später auf, so funktioniert es.


Anmelden zum Antworten