Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Hi Leute,
ich wage mich mittlerweile an SDL heran, hänge aber schon bei dem Problem, dass ich nur Bitmpas geladen bekomme. Ich möchte mir nun eine eigene GUI basteln, aber bei der Texturerzeugung kommts zu meinem Problem: Es werden keine Fehler ausgegeben, aber es geht dann einfach aus
Hier mal meine Lade-Funktion für Texturen:
Code:
function TTexture.Load(const S:string):boolean;
var TextureImage: PSDL_Surface;
begin
ifnotFileExists(S)then
begin
Result:=false;
Exit;
end;
TextureImage:=SDL_Image.IMG_Load(PChar(S));// Bilddaten in den Arbeitsspeicher laden
if(TextureImage <> nil)then
begin
glGenTextures(1,@Tex);// neue Textur erstellen
glBindTexture(GL_TEXTURE_2D, Tex);// als 2D-Textur binden
Log.LogError('Textur konnte nicht geladen werden: '+SDL_GetError,'LOAD('+S+')');//Fehler ausgeben
Result:=false;
end;
if(TextureImage <> nil)then
SDL_FreeSurface(TextureImage);// Arbeitsspeicher wieder frei geben
end;
Ich denke mein Problem liegt bei glTexImage2D, da ich nicht wirklich weiß, welche Parameter ich für zb. GIF bei internalformat und fromat angeben muss
cuz bubble
PS: Wenn ich mit dem glBitmap-Loader arbeite kommt das gleiche Problem ...
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Zuletzt geändert von Frase am Sa Jan 30, 2010 20:13, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Für was ein Betriebssystem/Prozessorarchitektur baust du das? Unter 64-bit passieren mit SDL Surfaces und OpenGL manchmal merkwürdige Dinge, wenn man den Header aus der Version des DGL-SDK nimmt, die ich damals hatte .
Außerdem sollte man direkten Zugriff auf die Pixeldaten einer SDL-Surface mit SDL_LockSurface und SDL_UnlockSurface umklammern:
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
also wenn meine Ladeprozedur abgearbeitet wurde, springt der Debugger immer sofort in die Finalisierung vom Logger. Für SDL hab ich das API-Template aus dem DGLSDK verwendet...
Aber mir is aufgefallen, dass der Fehler an dieser Zeile liegen muss:
Wenn ich die Parameter abändere damit auch der Alphakanal geladen wird entsteht das beschriebene Problem (mit den Werten oben sind die Farbwerte einfach falsch) Hier mal die abgeänderte Zeile:
Nun weiß ich aber auch nicht ob die einzelnen Pixeldaten unsigned bytes sind
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Dann liegt es vermutlich genau daran.
Du wirst wohl eine Fallunterscheidung machen müssen, wann du welche Daten vorliegen hast. Eventuell kann ein Blick in Lossys glBitmap.pas nicht schaden. Der Loader kann auch alles mögliche Laden.
Alternativ kannst du auch den direkt verwenden und sparst dir solchen Ärger.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Naja, ich habe einfach _alle_ Bilder mit Alphakanal, dann fällt sowas nicht auf, aber ein Testen auf Farbtiefe dürfte nicht zu aufwendig sein (ich behaupte sogar recht simpel).
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Zitat:
PS: Wenn ich mit dem glBitmap-Loader arbeite kommt das gleiche Problem ...
Mit Lossys Loader gehts auch nicht
@ZiZ:
Ich glaub früher oder später haben bei mir auch alle Texturen einen Alphakanal, magst du mal posten, wie du die Texturen lädst und in welchem Format die sind?
cuz bubble
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habe mir für SDL mal eine Funktion geschrieben, die mir eine SDL_Surface in einer GL_RGBA-Textur konvertiert. Nicht das schnellste, aber es läuft. Ich hab die Funktion als .pas-Datei angehangen.
Diese Funktion nimmt eine Surface entgegen. Wenn erwünscht, wird die Surface auf eine Power-Of-Two Größe vergrößert und nach RGBA Konvertiert. Dafür werden SDL-Interne Funktionen benutzt, sodass im Optimalfall alle Surfacearten entsprechend bearbeitet werden können. Der zurückgegebene Record enthält dann alle nötigen Informationen, um die Textur korrekt zu zeichnen.
Die Parameter sind die folgenden:
Src: PSDL_Surface Eine, z.B. mit SDL_image geladene, Surface, die für OpenGL umgewandelt werden soll.
DoConversion: Boolean = True Wenn dies True ist, wird eine Konvertierung nach RGBA und Power-Of-Two vorgenommen. Ansonsten wird angenommen, dass die Surface eine Power-Of-Two-RGBA-Surface ist.
InitialTextureID: TGLUInt = 0 Wenn diese ungleich 0 ist, wird keine Textur per glGenTextures angefordert sondern diese ID verwendet.
Der Record TgglTexture2D, der auch zurückgegeben wird, enthält dann alle Informationen über die Textur.
TexID: TGLUInt; Die OpenGL-Textur-ID der Textur.
SCoord: Single Die S-Koordinate bis zu der die Textur letztendlich geht. Wenn DoConversion auf False gesetzt war oder die Textur als breite bereits eine Breite hatte, die einem Power-Of-Two-Wert entspricht.
TCoord: Single Die T-Koordinate bis zu der die Textur letztendlich geht. Verhält sich ansonsten genauso wie SCoord, nur dass es hier um die Höhe geht.
OrigW: Integer; Die Breite, die die Eingangssurface hatte.
OrigH: Integer; Die Höhe, die die Eingangssurface hatte.
greetings
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Ich mache noch ein paar mehr Dinge, aber für den Anfang dürfte das so reichen. Ich lade nur PNGs (alle mit Alphakanal). Wie man sieht, suggeriert meine Funktion schon einen Alphakanal (ZWloadtexturefromfileA). ZWloadtexturefromfile ist dann für Texturen ohne Alphakanal.
LG Ziz
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Ich hab jetzt einfach mit gluBuild2DMipmaps geladen und siehe da, es funktioniert einwandfrei :D:D:D
Danke für die Hilfe
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.