Achtung! Einige Bildformate erwarten statt GL_RGB, GL_BGR.Diese Konstante fehlt in den Standard-Headern
glTexImage2D(GL_TEXTURE_2D,0,3,strtoint(Imagelist[3].strings[Imagelist[1].IndexOf(s1)]),strtoint(Imagelist[4].strings[Imagelist[1].IndexOf(s1)]),0, GL_BGR, GL_UNSIGNED_BYTE,nil);//Nil ist irgendein Pointer den ich, aber nicht speichern kann
So ich rufe das jetzt vor jedem Zeichnen auf mit dem richtigen Dateinamen. Blos zwei Probleme sind aufgetaucht.
1. Die Farben sind nicht richtig (liegt an dem glTexImage2D(GL_TEXTURE_2D, 0, 3, strtoint(Imagelist[3].strings[Imagelist[1].IndexOf(s1)]), strtoint(Imagelist[4].strings[Imagelist[1].IndexOf(s1)]), 0, GL_BGR, GL_UNSIGNED_BYTE, nil);) so weit ich das gesehen habe.
2. Wenn das etz 1000 mal gewechselt wird geht die Festplatte an, könnte es sein das bei jedem aufruf OpenGL extra Ram belegen muss?
Mein Ziel:
Die Grafiken in den Grafikspeicher zu laden und dann über eine Zahl diese immer ändern ohne sie neu an die Grafikkarte zu senden.
Ist das irgendwie möglich?
Würde mich über ein Beispiel freuen das funktioniert. Denn ich blicke ohne Beispiel etz garnix.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Als Erstes. Ganz wichtig. Auf jeden Fall solltest du es vermeiden wärend des Renderns Texturen zu laden. Texturen immer beim Programmstart laden.
Ich wollte es eigentlich ganz unten drunter machen. Aber vielleicht wäre es derzeit sogar nicht unbedingt verkehrt, wenn du derzeiten einen bestehenden Texturenloader benutzt. Sofern du nicht an SDL gebunden bist. Mit diesem hättest du dann die Möglichkeit eine Textur zu laden erstellen zu lassen und könntest jederzeit die Höhe/Breite der Textur in Erfahrung bringen, da das Objekt das alles schon kappselt.
Unter Laden verstehe ich Datei einlesen (IMG_Load) und die Daten an OpenGL schicken (glTexImage2D). Das sind normalerweise Operationen die relativ lange brauchen und deswegen diese so selten wie möglich aufgerufen werden. Also am Besten nur ein Mal.
Du kannst auch Problemlos mehrere Texturen auf einmal laden und diese benutzten. Da würde ich die Verwaltung der IDs etwas vereinfachen. In einer TStringList kannst du Zusätz zu einen Namen auch noch ein TObject ablegen. Und TObject ist nur ein Pointer. Also kann man dort auch eine Zahl ablegen.
Code:
// Einem Eintrag eine Zahl zuweisen
StringList.Objects[0]:=Pointer(TexID);
// Eine Zahl von einem Eintrag erfragen
TexID :=Integer(StringList.Objects[0]);
Damit kannst du schon mal das Doppelhandling vermeiden.
Dann würde ich dir empfehlen, dass du zu Begin (Nach dem Initialisieren) ein Mal alle Texturen lädst und diese mit Name/TextureID in einer Liste ablegst. Wenn du jetzt eine Textur benötigst, dann kannst du nach dem Eintrag in der Liste suchen und nimmst die ID und bindest (glBindTexture) sie. Anschließend kannst du dann dein Quad zeichnen. Wenn eine Textur geladen ist brauchst du sie nur noch zu binden und GL_TEXTURE_2D aktivieren falls dies nicht der Fall ist. Und schon kannst du sie benutzen.
Als Erweiterung kannst du es so machen, dass du auf das anfängliche Laden verzichtest und die erst dann lädst sobald jemand eine Datei namens 'blah.bmp' laden will. Dann stellst du fest. Oh die kenne ich nicht und dann lädst du sie, packst sie in die Liste und lieferst die ID zurück.
PS: Ich sehe gerade, dass du 5 Listen benutzt um dein Bild abzuspeichern. Das ist äußerst unpraktisch. Außerdem hast du in dem einen Fall sogar noch einen Pointer in die Liste gelegt. Das müsste Normal sogar Fehler produzieren. Denn der Pointer existiert nur solange wie das SDL_surface existiert. Und das wurde direkt im Anschluss gelöscht.
also ich denke das liegt an den beiden BMPs die ich mit Paint erstellt habe, das ein fehler mit der Farbe auftritt.
Also jetzt benutze ich nur eine Stringlist, da man dann mit nem Namen zu einem Object geben kann.
Wusste garnet das es sowas gibt ^^
Ich müsste jetzt wissen wie ich die zwei Grafiken (fürn test zwei stück) jetzt löschen kann, weil ich hab nur noch die TexID und mit der kriege ich die Grafiken ja noch.
Also nochmal zu meinem Problem:
Ich habe zwei Grafiken der eine ist Komplett Rot (512*512) und der andere ist Komplett Grün (512*512).
Das Problem ist, das jetzt auf dem Test-Prog nur Blau und Gelb erscheinen.
Ich habe mir mal die Gras und Stein Textur vom Blending Tutorial geladen und die werden korrekt geladen.
Die beiden 512*512 Grafiken sind direkt nach dem Laden ja auch noch richtig.
Blos später das zurück holen sind die dann falsch.
Naja und zum Blending, das Tutorial check ich auch nicht xD
Wir nicht gesagt wo man was einfügen soll, oder vllt steht es doch da blos meine Fähigkeiten reichen nicht bis dahin das zu verstehen.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.