Mehrere Texturen mit Devil
-
Ich nutz folgenden code für das texturen Laden:
void loadtexture(char * file){ ilGenImages(0,&DevILID); // generieren von IL ID für Texturen ilBindImage(DevILID); // bestimmten Texturindex als aktell setzen texloadsuccess=ilLoadImage (file); texloaded=false; if (!texloadsuccess) // laden der Textur { ilDeleteImages(1,&DevILID); // bei Fehlschlag wieder Index freigeben } else { printf("lol);"); long h, v, bpp, f; unsigned char *texdata=0; h=ilGetInteger(IL_IMAGE_WIDTH); // Breite des Bildes holen v=ilGetInteger(IL_IMAGE_HEIGHT); // Höehe des Bildes holen bpp=ilGetInteger(IL_IMAGE_BYTES_PER_PIXEL); // Farbtiefe des Bildes f=ilGetInteger(IL_IMAGE_FORMAT); // Format des Bildes z.B. RGB RGBA BGR BGRA usw. texdata=ilGetData(); // Zeiger auf Bilddaten holen //.... an dieser Stellen kommt OpenGL ins Spiel } long h, v, bpp, f; unsigned char *texdata=0; h=ilGetInteger(IL_IMAGE_WIDTH); // Breite des Bildes holen v=ilGetInteger(IL_IMAGE_HEIGHT); // Höehe des Bildes holen bpp=ilGetInteger(IL_IMAGE_BYTES_PER_PIXEL); // Farbtiefe des Bildes f=ilGetInteger(IL_IMAGE_FORMAT); // Format des Bildes z.B. RGB RGBA BGR BGRA usw. texdata=ilGetData(); // Zeiger auf Bilddaten holen glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR); // gibt an mit welchen Eigenschaften die Textur glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); // in OpenGL dargestellt werden soll gluBuild2DMipmaps(GL_TEXTURE_2D, bpp, h, v, f, GL_UNSIGNED_BYTE, texdata); // erzeuge eine Mipmap Textur ilBindImage(3); BYTE* data = ilGetData(); std::cout<<"\n"<<DevILID; }
mit einer Textur klappt das ja ganz schön, aber ich hab nun schon viele Versuche unternommen zwei Texturen zu laden, aber wenn ich eine zweite lad, wird die erste durch sie ersetzt, wieso?
-
PS:dies ist kein experiement, sondern original, es ist mir klar das das nich geht
-
Wie lädst du denn deine zweite Textur? Ich würd außerdem mal meinen, dass deine Funktion da mangels
ilDeleteImages()
ein Memory Leak erzeugt.
-
ich erhöhe winfach die devilid, aber eben die erste wird einfach überschrieben, aber meine versuche hab ich glöscht
-
Dadurch erzeugst du aber doch keine neue OpenGL-Textur!? Und was genau meinst du eigentlich mit "erhöhen"!?
-
au, ich glaub ich weiss was du meinst, aber ich glaub ich weiss jetzt, aber, wie erzeugt man in c++ eine neue id?
-
Ich glaub du solltest dir nochmal anschauen wie OpenGL eigentlich genau funktioniert...
-
ok, google ich halt noch ein bisschen, hast du vielleicht einen Link?
-
Na schau dir einfach nochmal genau an, was
glGenTextures()
,glBindTexture()
undglTexImage2D()
und diese ganzen DevIL Funktionen eigentlich wirklich tun.