openGL + Texture



  • Ich bin aktuell soweit, dass ich mit libpng ein png (64*64) lade und als Texture festsetze. Nur die Ausgabe passt nicht ganz, statt des Bildes wird nur eine einheitliche Frabe gesetzt.

    Das rote Viereck soll das geladene Bild darstellen:
    http://testing.coders-nemesis.eu/testrender.png

    Das ist die Textur:
    http://testing.coders-nemesis.eu/testpng.png

    Den Vollständigen Code kann ich fast nicht posten, das wird schon ziemlich lange.

    Erstellen der Textur

    glGenTextures(1, &texture_name_);
    
                glBindTexture(GL_TEXTURE_2D, texture_name_);
    
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    
                std::cout << '\n' << width << height << '\n';
    
                for (unsigned a (0); a < width; a++)
                {
                    for (unsigned b(0); b < height; b++)
                    {
                        std::cout << static_cast<int>(data[a*height +b]) << "\t";
                    }
                    std::cout << '\n';
                }
    
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    

    Ausgabe:

    glBegin(GL_QUADS);
                {
    
                    glTexCoord2f(0.0f, 0.0f); glVertex2i(0                 , wd->get_height()                      );
                    glTexCoord2f(1.0f, 0.0f); glVertex2i(tex_->get_width() , wd->get_height()                      );
                    glTexCoord2f(1.0f, 1.0f); glVertex2i(tex_->get_width() , wd->get_height() - tex_->get_height() );
                    glTexCoord2f(0.0f, 1.0f); glVertex2i(0                 , wd->get_height() - tex_->get_height() );
    
                }
    

    glEnable(GL_TEXTURE_2D ist aufgerufen.

    Sieht irgendjemand den Fehler? Wo weitersuchen?



  • Dummerweise war rot wohl die falsche Hintergrundfarbe - es wird keinerlei Texture in irgendeiner weise geladen!



  • Hast du mittels glGetError mal überprüft ob irgendwelche Errorflags gesetzt wurden?



  • glGetError() gibt nur GL_NO_ERRO zurück



  • Hast du bei glTexImage2D als internalFormat schonmal 3 probiert?



  • NeHe verwendet 3 als SourceFormat, da hatte ich's schon Probiert, auf deinen Hinweis hin auch als InternalFormat - beides mal das gleiche Ergebniss.

    Mit glDrawPixels kann ich das wunderbar zeichnen ...



  • Das ganze scheint wohl kein (reines) OpenGL Problem zu sein.

    Ich habe jetzt mal die Textur in der gleichen Funktion erstellt, die auch das Rendern übernimmt und es scheint so zu funktionieren ...

    Also weiter mitm Debugger 😉

    Fehler Gefunden!

    Die Textur wird mit einer std::map Verwaltet, nach dem erzeugen dort eingefügt. Der D'tor der Textur ruft glDeleteTextures() auf. So kann das natürlich nicht gehen ...


Anmelden zum Antworten