SDL OpenGL - nur quadratische Texturen?!
-
hallo,
ich schreibe gerade eine kleine SDL-OpenGL anwendung um mich
in das thema einzuarbeiten.allerdings stehe ich nun vor dem problem das nur quadratische texturen
angezeigt werden?ich kann zwar jegliche bilder als texturen laden ohne fehler - es
werden aber nur quadratische angezeigt wenn ich sie zeichne!ich habe ein wenig gegooglelt und gefunden das ich
glEnable(GL_TEXTURE_RECTANGLE_EXT);anstatt
glEnable(GL_TEXTURE_2D);nutzen soll... doch mein compiler sagt mir das GL_TEXTURE_RECTANGLE_EXT nicht gefunden
werden kann?meine code-schnipsel:
#include <GL/gl.h> #include <GL/glu.h> #include <SDL.h> #include <SDL_image.h> ...unsigned LoadTexture(const char *filename) { SDL_Surface *bitmap, *conv; unsigned texture; /* Lade die Datei */ //bitmap = SDL_LoadBMP(filename); bitmap = IMG_Load(filename); if (bitmap == NULL) { return 0; } /* Konvertiere ins 32-Bit RGBA-Format */ conv = SDL_CreateRGBSurface(SDL_SWSURFACE, bitmap->w, bitmap->h, 32, #if SDL_BYTEORDER == SDL_BIG_ENDIAN 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); #else 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000); #endif SDL_BlitSurface(bitmap, 0, conv, 0); /* Erstelle eine OpenGL-Textur */ glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glPixelStorei(GL_UNPACK_ROW_LENGTH, conv->pitch / conv->format->BytesPerPixel); glTexImage2D(GL_TEXTURE_2D, 0, 3, conv->w, conv->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, conv->pixels); glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); /* Gib die verwendeten Surfaces und Speicherplatz frei */ SDL_FreeSurface(bitmap); SDL_FreeSurface(conv); return texture; }glClear(GL_COLOR_BUFFER_BIT); //glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_RECTANGLE_EXT); glEnable(0x84F5); // hintergrund glBindTexture(GL_TEXTURE_2D, background); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2i(0, 0); glTexCoord2f(1.0f, 0.0f); glVertex2i(800, 0); glTexCoord2f(1.0f, 1.0f); glVertex2i(800, 600); glTexCoord2f(0.0f, 1.0f); glVertex2i(0, 600); glEnd();danke schonmal

-
Ich würde mir einfach ne Funktion schreiben die die Bilddaten in ein 2^n * 2^n Format stutzt.
Gibt aber wohl noch andere Wege.
-
würd ich auch sagen, hab eigentlich noch nie nicht quadratische texturen gebraucht. außerdem kommen viele alte karten damit nicht zurecht auch wenn die extension unterstützt wird.
Die extension muss initalisiert werden bevor du sie verwenden kannst. google einfach mal nach "OpenGL Extensions laden", dann solltest du massenhaft seiten finden auf denen dir das erklärt wird. mitterleiweile gibts auch schon librarys die dir diese arbeit abnehmen.
Glaub außerdem, dass es schon eine GL_TEXTURE_RECTANGLE_ARB Extension gibt (!?) wenn dann nimm die, wenns gibt immer ARB Extensions verwenden.
lg, stefan
-
Da fehlt der Header <glext.h>
-
ja danke euch!
habs nun so gemacht das ich das bild in ein 2^n * 2^n
Format umrechne... klappt gut