Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 22:00

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SDL geht einfach aus oO
BeitragVerfasst: Fr Jan 29, 2010 18:06 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2. function TTexture.Load(const S: string):boolean;
  3. var TextureImage: PSDL_Surface;
  4. begin
  5.   if not FileExists(S) then
  6.   begin
  7.     Result:=false;
  8.     Exit;
  9.   end;
  10.  
  11.   TextureImage:=SDL_Image.IMG_Load(PChar(S));// Bilddaten in den Arbeitsspeicher laden
  12.   if (TextureImage <> nil) then
  13.   begin
  14.     glGenTextures(1, @Tex);             // neue Textur erstellen
  15.     glBindTexture(GL_TEXTURE_2D, Tex);  // als 2D-Textur binden
  16.  
  17.     // linear filtern wenn Textur kleiner als Bild
  18.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  19.     // linear filtern wenn Textur größer als Bild
  20.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  21.  
  22.     // Textur in den Videospeicher laden
  23.     glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage.w, TextureImage.h, 0, GL_BGR, GL_UNSIGNED_BYTE, TextureImage.pixels);
  24.  
  25.     // lineares Filtern
  26.     Result:=true;
  27.   end
  28.   else
  29.   begin
  30.     Log.LogError('Textur konnte nicht geladen werden: '+SDL_GetError,'LOAD('+S+')' ); //Fehler ausgeben
  31.     Result:=false;
  32.   end;
  33.  
  34.   if (TextureImage <> nil) then
  35.     SDL_FreeSurface(TextureImage); // Arbeitsspeicher wieder frei geben
  36. end;
  37.  


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.
code-stil auf pascal geändert :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Sa Jan 30, 2010 15:40 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du mit dem Debugger reinstepst, wo genau fliegst du da raus?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: So Jan 31, 2010 12:00 
Offline
DGL Member
Benutzeravatar

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:
Code:
  1.     SDL_LockSurface(TextureImage);
  2.     try
  3.       // Textur in den Videospeicher laden
  4.       glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage.w, TextureImage.h, 0, GL_BGR, GL_UNSIGNED_BYTE, TextureImage.pixels);
  5.     finally
  6.       SDL_UnlockSurface(TextureImage);
  7.     end;


greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Mo Feb 01, 2010 15:34 
Offline
DGL Member
Benutzeravatar

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:
Code:
  1. glTexImage2D(GL_TEXTURE_2D,  0, 3, TextureImage.w, TextureImage.h,  0, GL_BGR, GL_UNSIGNED_BYTE, TextureImage.pixels);


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:
Code:
  1. glTexImage2D(GL_TEXTURE_2D,  0, 4, TextureImage.w, TextureImage.h,  0, GL_BGRA, GL_UNSIGNED_BYTE, TextureImage.pixels);


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 -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Mo Feb 01, 2010 17:28 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Mo Feb 01, 2010 23:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Di Feb 02, 2010 08:59 
Offline
DGL Member
Benutzeravatar

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 -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Di Feb 02, 2010 10:17 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Zeig mal deinen Code her wie du die glBitmap benutzt.

Die ist weitläufig getestet und damit muss es gehn. Oder dein Bild ist defekt.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Di Feb 02, 2010 11:35 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Di Feb 02, 2010 13:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Hier ist mein (auf wichtige Dinge beschränkter!) Code in C:
Code:
  1. GLuint ZWloadtexturefromfileA(char* name)
  2. {
  3.   SDL_Surface* bild= IMG_Load(name);
  4.   GLuint texnr;
  5.   glGenTextures(1, &texnr);
  6.   glBindTexture(GL_TEXTURE_2D, texnr);
  7.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  8.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  9.   gluBuild2DMipmaps(GL_TEXTURE_2D, 4, bild->w, bild->h, GL_RGBA, GL_UNSIGNED_BYTE, bild->pixels);
  10.   SDL_FreeSurface(bild);
  11.   return texnr;
  12. }

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SDL geht einfach aus oO
BeitragVerfasst: Mi Feb 03, 2010 10:32 
Offline
DGL Member
Benutzeravatar

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: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 -


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]