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

Aktuelle Zeit: Mo Jul 14, 2025 21:23

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Effektiveres Texturenladen...
BeitragVerfasst: Sa Apr 11, 2009 13:51 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Hallo... ich baue immernoch an meinem 2D-Programm.

Das meiste funktioniert bis jetzt gut, das ganze hatte aber einige Problem:
zum einen, dass es nur Bitmap dateien fehlerfrei laden konnte also habe ich die Ladeprozedur ein klein wenig erweitert, so das sie nun so aussieht:

Code:
  1.  
  2. procedure TFormStart.TexturenErstellen(const TexturLink : PAnsiChar);
  3. var
  4.     Tex : PSDL_Surface;
  5.     HV  : String[4];
  6. begin
  7.   Tex := IMG_Load(TexturLink);
  8.   If Assigned(Tex)                                                              //entspricht "Textur <> Nil"
  9.     Then begin
  10.       glGenTextures  (1, @AktKarte.TexturAnzahl);                               //Anzahl Texturen, Zeiger
  11.       glBindTexture  (GL_TEXTURE_2D, AktKarte.TexturAnzahl);
  12.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  13.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  14.       HV := LowerCase(DateiEnde(TexturLink));
  15.       If HV = 'bmp' Then glTexImage2D(GL_TEXTURE_2D,                            //Typ der Textur
  16.                            0, 3,                                                //Detailstufe, Anzahl Farbkomponenten
  17.                            Tex^.w, Tex^.h, 0,                                   //Breite, Höhe und Rahmenbreite der Textur
  18.                            GL_BGR,                                              //Reihenfolge der Farbmischung
  19.                            GL_UNSIGNED_BYTE,                                    //Typ der einzelnen Farbwerte
  20.                            Tex^.pixels)                                         //Übergabe der Pixel
  21.                     Else
  22.       If HV = 'tga' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Tex^.w, Tex^.h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Tex^.pixels) Else
  23.       If HV = 'jpg' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Tex^.w, Tex^.h, 0, GL_RGB , GL_UNSIGNED_BYTE, Tex^.pixels) Else
  24.       If HV = 'png' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Tex^.w, Tex^.h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Tex^.pixels) Else
  25.       If HV = 'gif' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Tex^.w, Tex^.h, 0, GL_RGB , GL_UNSIGNED_BYTE, Tex^.pixels);
  26.       SDL_FreeSurface(Tex);
  27.       FormKontrollStation.MemoKonsole.Lines.Add   ('Textur erfolgreich geladen: '        +TexturLink);
  28.       FormTexturManager.TexturHinzu(DateiName(TexturLink));
  29.     end
  30.     Else FormKontrollStation.MemoKonsole.Lines.Add('Textur konnte nicht geladen werden: '+TexturLink);
  31. end;


AktKarte.TexturAnzahl enthält die Anzahl Texturen. Dies funktioniert, da sonst scheinbar keine weiteren Indexe bei OpenGL erstellt werden.
bmp funktioniert natürlich Fehlerfrei,
jpg ebenso,
tga funktioniert auch, aber wenn ich eine Textur laden würde, die KEINEN Alpha-Kanal hat... ich glaub das gäbe Probleme (lade gerade GIMP runter zum testen aber meine Internetverbindung ist in letzter Zeit... ziemlicher Müll, deshalb dauert das wieder ewig),
PNG verursacht eine Zugriffsverletzung und
gif wird falsch angezeigt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 15:24 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Zu SDL kann ich nichts sagen weil ich das selbst nicht benutze. Also wenn dort irgendwas falsch geladen wird, kann ich dir nicht helfen.
Allerdings sind mir noch ein paar andere Ungereimtheiten aufgefallen:

Der dritte Parameter bei glTexImage2D der bei dir überall 3 ist, sollte wenn ein Alphakanal vorhanden ist 4 sein. siehe Wiki: glTexImage

Dann das mit der "Aktkarte.TexturAnzahl". Seh ich das richtig das der Wert jedesmal überschireben wird, wenn du eine Textur lädst?
Das sollte man nämlich nicht machen, weil da drin die TexturID steht. Und auch wenn die meistens fortlaufend sind, müssen sie es nicht sein. Zum Beispiel, wenn du Texturen wieder frei gibts. Zumindest ist es schlechter Stil.
Besser wäre also ein Array, dynamisch wenn die Texturanzahl variiert, was die TexturIDs enthält und die Anzahl der Texturen kann man dann über die Länge des Arrays herausfinden.

Edit:
Hab mir gerade mal die SDL Documentation angeschaut. Das Gif-Format hat ja normalerweise nur 1 Byte pro Pixel und ist indiziert, das heißt den Werten für jedes Pixel wird noch anhand einer Palette die Farbe zugewiesen. Und scheinbar wird beim Laden mit SDL das nicht automatisch umgewandelt. Zumindest enhält SDL_Surface ein SDL_PixelFormat in dem es auch einen Pointer auf die Palette gibt. Außerdem kann man da ablesen wieviel Byte ein Pixel hat. Was zB bei TGAs ohne Alphakanal helfen könnte.

"8-bit pixel formats are the easiest to understand. Since its an 8-bit format, we have 8 BitsPerPixel and 1 BytesPerPixel. Since BytesPerPixel is 1, all pixels are represented by a Uint8 which contains an index into palette->colors. So, to determine the color of a pixel in a 8-bit surface: we read the color index from surface->pixels and we use that index to read the SDL_Color structure from surface->format->palette->colors."
Von http://www.libsdl.org/cgi/docwiki.cgi/SDL_PixelFormat


Zuletzt geändert von Schläfer am Sa Apr 11, 2009 15:47, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 15:41 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
"Der dritte Parameter bei glTexImage2D der bei dir überall 3 ist, sollte wenn ein Alphakanal vorhanden ist 4 sein. siehe Wiki: glTexImage"
Hmmmm... funktioniert irgendwie trotzdem. :D

"Besser wäre also ein Array, dynamisch wenn die Texturanzahl variiert, was die TexturIDs enthält und die Anzahl der Texturen kann man dann über die Länge des Arrays herausfinden."
Ich hab die Texturen wie im BomberMan Tutorial in eine HashedStringList gespeichert und die Felder die diese TexturIDs enthalten hab ich als Klasse (da sich ein 3-Dimensionales Array nur schwer bearbeiten lässt (z.B. eine Reihe einfügen)).
Zum Thema Texturen löschen ---> viewtopic.php?t=8234
Aus irgendeinem Grund funktioniert das bei mir eh nicht, also lösch ich keine Texturen. ;)

Eigentlich würde es mir schon helfen wenn man mir sagt wie ich abfragen kann ob eine Textur einen Alpha-Kanal hat, dann könnte ich z.B. diese Zeile:
Code:
  1. If HV = 'tga' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Tex^.w, Tex^.h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Tex^.pixels) Else


durch folgende ersetzen:
Code:
  1. If HV = 'tga'
  2.   Then
  3.     If TexturHatAlphaKanal
  4.       Then glTexImage2D(GL_TEXTURE_2D, 0, 4,  Tex^.w, Tex^.h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Tex^.pixels)
  5.       Else glTexImage2D(GL_TEXTURE_2D, 0, 3,  Tex^.w, Tex^.h, 0, GL_BGR , GL_UNSIGNED_BYTE, Tex^.pixels)
  6.    Else ...


So in etwa hab ich mir das vorgestellt... und gif ist ja eh komplizierter. Dummerweise gibt es auch noch kompression die ich auch noch irgendwie abfragen müsste.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 16:00 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Achso, ok. Das Bomberman-Tutorial hatte ich mir noch nie angeschaut.
So richtig versteh ich deine Vorgehensweise aber immer noch nicht. Du lädst doch in der "TFormStart.TexturenErstellen" ein Textur. Und in der "FormTexturManager.TexturHinzu" nochmal? Oder fügst du da nur den String zur Liste hinzu?

Zu TGA und GIF hab ich oben noch was ergänzt, das dir vielleicht hilft.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 16:18 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
"Und in der "FormTexturManager.TexturHinzu" nochmal? Oder fügst du da nur den String zur Liste hinzu?"
Jo manchmal ist mein Quelltext wahrscheinlich konfus. :D
Bei TexturHinzu wird die Textur eigentlich nur der HashedStringList hinzugefügt und in eine ComcoBox zur Auswahl reingestellt.

Okay... nach ein wenig Arbeit und Überlegungen hab ich jetzt folgenden Quelltext:
(die Variable Tex hab ich in Textur umbenannt)
Code:
  1. procedure TFormStart.TexturenErstellen(const TexturLink : PAnsiChar);
  2. var
  3.     Textur       : PSDL_Surface;
  4.     TexturFormat : PSDL_PixelFormat;
  5.     HV           : String[4];
  6. begin
  7.   Textur := IMG_Load(TexturLink);
  8.   TexturFormat := Textur.Format;
  9.   If Assigned(Textur)                                                           //entspricht "Textur <> Nil"
  10.     Then begin
  11.       glGenTextures  (1, @AktKarte.TexturAnzahl);                               //Anzahl Texturen, Zeiger
  12.       glBindTexture  (GL_TEXTURE_2D, AktKarte.TexturAnzahl);
  13.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  14.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  15.       HV := LowerCase(DateiEnde(TexturLink));
  16.       If HV = 'bmp' Then glTexImage2D(GL_TEXTURE_2D,                            //Typ der Textur
  17.                            0, 3,                                                //Detailstufe, Anzahl Farbkomponenten
  18.                            Textur^.w, Textur^.h, 0,                             //Breite, Höhe und Rahmenbreite der Textur
  19.                            GL_BGR,                                              //Reihenfolge der Farbmischung
  20.                            GL_UNSIGNED_BYTE,                                    //Typ der einzelnen Farbwerte
  21.                            Textur^.pixels)                                      //Übergabe der Pixel
  22.                     Else
  23.       If HV = 'tga'
  24.         Then If TexturFormat.BytesPerPixel = 24
  25.                     Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Textur^.w, Textur^.h, 0, GL_BGR , GL_UNSIGNED_BYTE, Textur^.pixels)
  26.                     Else glTexImage2D(GL_TEXTURE_2D, 0, 4,  Textur^.w, Textur^.h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Textur^.pixels) Else
  27.       If HV = 'jpg' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Textur^.w, Textur^.h, 0, GL_RGB , GL_UNSIGNED_BYTE, Textur^.pixels) Else
  28.       If HV = 'png' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Textur^.w, Textur^.h, 0, GL_BGR , GL_UNSIGNED_BYTE, Textur^.pixels) Else
  29.       If HV = 'gif' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Textur^.w, Textur^.h, 0, GL_RGB , GL_UNSIGNED_BYTE, Textur^.pixels);
  30.       SDL_FreeSurface(Textur);
  31.       FormKontrollStation.MemoKonsole.Lines.Add   ('Textur erfolgreich geladen: '        +TexturLink);
  32.       FormTexturManager.TexturHinzu(DateiName(TexturLink));
  33.     end
  34.     Else FormKontrollStation.MemoKonsole.Lines.Add('Textur konnte nicht geladen werden: '+TexturLink);
  35. end;


Warum kann ich im Quelltext nix fett machen?

Zu Gif hab ich jetzt noch keine richtige Lösung (Notfals ist es auch nicht alzu schlimm, da wohl heutzutage eh kaum noch wer Gif für Texturen verwendet, oder?).
2. Problem wäre PNG bzw. Kompression.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 16:57 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Vielleicht funktioniert das für GIF. Vielleicht auch nicht kA. Hab' ja eigentlich keine Ahnung von SDL und hab mir das hier nur grad so zusammengebastelt
Code:
  1.  
  2. type
  3.   TRGBColor = Array[0..2] of Byte;
  4.   PRGBColor = ^TRGBColor;
  5. var
  6.   GIF_Pixel:Array of TRGBColor;
  7.   GIF_Index:^Byte;
  8.   i:integer;
  9. begin
  10.   ...
  11.  
  12.   If HV = 'gif' Then
  13.   begin
  14.     setlength(GIF_Pixel,Textur^.w*Textur^.h);
  15.     GIF_Index:=Textur^.pixels;
  16.     for i:=0 to length(GIF_Pixel)-1 do
  17.     begin
  18.       GIF_Pixel[i]:=PRGBColor(Integer(TexturFormat^.Palette^.Colors)+GIF_Index^*3)^;
  19.       inc(Integer(GIF_Index));
  20.     end;
  21.     glTexImage2D(GL_TEXTURE_2D, 0, 3,  Textur^.w, Textur^.h, 0, GL_RGB , GL_UNSIGNED_BYTE, @GIF_Pixel);
  22.   end;
  23.  

GIF_Pixel soll dann die richtigen Farbwerte enthalten. Vorausgesetzt die Farbwerte sind in der Palette 3 Byte groß.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 17:39 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Leider hat deine Methode nur eine merkwürdige Textur zurückgegeben... ich hab mit der Arraylänge rumgespielt aber ohne die Textur blieb unverändert...
Die Veränderung der Parameters für die Anzahl der ByteProPixel von 3 auf 1 wirkte sich dahingehend aus das die Grafik aus Graustufen bestand...

Ich hab mal im DGL Wiki nach "glTexImage2D" gesucht für andere Parameter als GL_RGB und fand "GL_COLOR_INDEX" sehr passend, allerdings ist dann meine Gif-Textur komplett schwarz (auch hier hatte die Veränderung des Types nichts verändert).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 18:25 
Offline
DGL Member

Registriert: Mo Mär 16, 2009 10:22
Beiträge: 26
Ich nutze (zwar in c++) zum laden von PNG´s folgendes:
Code:
  1.  
  2. void ressource_manager::load_now_png(const char* dateiname,ressource_container_base& container)
  3. {
  4.     SDL_Surface *textur;
  5.     textur=IMG_Load(dateiname);
  6.      GLenum texture_format;
  7.     GLint  nOfColors= textur->format->BytesPerPixel;
  8.         if (nOfColors == 4)     // contains an alpha channel
  9.         {
  10.                 if (textur->format->Rmask == 0x000000ff)
  11.                         texture_format = GL_RGBA;
  12.                 else
  13.                         texture_format = GL_BGRA;
  14.         } else if (nOfColors == 3)     // no alpha channel
  15.         {
  16.                 if (textur->format->Rmask == 0x000000ff)
  17.                         texture_format = GL_RGB;
  18.                 else
  19.                         texture_format = GL_BGR;
  20.         } else {
  21.                 printf("warning: the image is not truecolor..  this will probably break\n");
  22.         }
  23.     // In ein Opengl-Textur packen
  24.     glGenTextures(1, &container.texture_id);
  25.     glBindTexture(GL_TEXTURE_2D, container.texture_id);
  26.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  27.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  28.  
  29.     glTexImage2D(GL_TEXTURE_2D, 0, nOfColors, textur->w, textur->h,0, texture_format, GL_UNSIGNED_BYTE, textur->pixels);
  30.     SDL_FreeSurface(textur);
  31.  


Damit kann man dann sowohl Pngs mit als auch ohne Transparenz laden. Vielleicht kannst du davon was adaptieren ( ist etwas kürzer)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 18:45 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Naja, kann leider nur raten ob das funktionieren würde. Aber hast schon recht, GIF würde ich auch nicht mehr verwenden um Texturen zu speichern. Da ist PNG um einiges besser, also wenn du vielleicht wenigstens das noch zum laufen bringst, wäre das wohl ausreichend.
Wenn du Lust und Zeit hast, kannst du ja mal die original Textur und wie sie im Programm rauskommt hochladen, weil ich nur ungern dabei verweile das etwas von mir nicht funktioniert :wink: . Aber wie gesagt, ist das zweitrangig.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 19:13 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
UND DIE PROZEDUR WÄCHST!!!

Code:
  1. Procedure TFormStart.TexturenErstellen(const TexturLink : PAnsiChar);
  2. var
  3.     Textur       : PSDL_Surface;
  4.     HV           : String[4];
  5.     TexturFormat : GLenum;
  6. begin
  7.   Textur := IMG_Load(TexturLink);
  8.   If Assigned(Textur)                                                           //entspricht "Textur <> Nil"
  9.     Then begin
  10.       glGenTextures  (1, @AktKarte.TexturAnzahl);                               //Anzahl Texturen, Zeiger
  11.       glBindTexture  (GL_TEXTURE_2D, AktKarte.TexturAnzahl);
  12.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  13.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  14.       HV := LowerCase(DateiEnde(TexturLink));
  15.       If HV = 'bmp' Then glTexImage2D(GL_TEXTURE_2D,                            //Typ der Textur
  16.                            0, 3,                                                //Detailstufe (Level n ist die n-te Mipmap reduzierung des Bildes), Anzahl Farbkomponenten
  17.                            Textur^.w, Textur^.h, 0,                             //Breite, Höhe und Rahmenbreite der Textur
  18.                            GL_BGR,                                              //Reihenfolge der Farbmischung
  19.                            GL_UNSIGNED_BYTE,                                    //Typ der einzelnen Farbwerte
  20.                            Textur^.pixels)                                      //Übergabe der Pixel
  21.                     Else
  22.       If HV = 'tga'
  23.         Then If Textur.Format.BitsPerPixel = 24
  24.                     Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Textur^.w, Textur^.h, 0, GL_BGR , GL_UNSIGNED_BYTE, Textur^.pixels)
  25.                     Else glTexImage2D(GL_TEXTURE_2D, 0, 4,  Textur^.w, Textur^.h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Textur^.pixels)
  26.                                                                                                                                 Else
  27.       If HV = 'jpg' Then glTexImage2D(GL_TEXTURE_2D, 0, 3,  Textur^.w, Textur^.h, 0, GL_RGB , GL_UNSIGNED_BYTE, Textur^.pixels) Else
  28.       If HV = 'png'
  29.         Then begin
  30.           If Textur.Format.BytesPerPixel = 4 //Mit Alpha-Kanal
  31.             Then If Textur.Format.Rmask = $000000FF
  32.                     Then TexturFormat := GL_RGBA
  33.                     Else TexturFormat := GL_BGRA
  34.             Else If Textur.Format.BytesPerPixel = 3 //Ohne Alpha-Kanal
  35.                     Then If Textur.Format.Rmask = $000000FF
  36.                           Then TexturFormat := GL_RGB
  37.                           Else TexturFormat := GL_BGR;
  38.           glTexImage2D(GL_TEXTURE_2D, 0, Textur.Format.BytesPerPixel, Textur^.w, Textur^.h, 0, TexturFormat, GL_UNSIGNED_BYTE, Textur^.pixels);
  39.         end                                                                                                                     Else
  40.       If HV = 'gif' Then glTexImage2D(GL_TEXTURE_2D, 0, 1,  Textur^.w, Textur^.h, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, Textur^.pixels);
  41.  
  42.       SDL_FreeSurface(Textur);
  43.       FormKontrollStation.MemoKonsole.Lines.Add   ('Textur erfolgreich geladen: '        +TexturLink);
  44.       FormTexturManager.TexturHinzu(DateiName(TexturLink));
  45.     end
  46.     Else FormKontrollStation.MemoKonsole.Lines.Add('Textur konnte nicht geladen werden: '+TexturLink);
  47. end;


Das wäre der Zwischenstand... ich habe meine Test-PNG-Textur erfolgreich laden können ohne Grafikfehler, ich gehe mal davon aus das ich jedes PNG-Bild laden könnte.
Aber Gif fehlt noch (wobei das Format wohl weniger wichtig ist).


Ich möchte mich nochmal herzlich für die Hilfe bedanken, vllt könnte einer der hohen "Tiere" (Mods oder Admins) das hier in das 4. Tutorial ("Texturen, Tapeten und Ihre Tücken") einfügen (wäre nur so eine kleine Idee nebenbei). ;)
Der vollständigkeit halber hier noch die "DateiEnde"-Funktion:
Code:
  1. Function DateiEnde(pPfad: PAnsiChar): String;
  2. var
  3.     i : Integer; HV : String;
  4. begin
  5.   HV   := ''; i := Length(pPfad);
  6.   Repeat
  7.     HV := pPfad[i]+HV;
  8.     Dec(i);
  9.   Until pPfad[i] = '.';
  10.   Result := PAnsiChar(HV);
  11. end;


"weil ich nur ungern dabei verweile das etwas von mir nicht funktioniert"
Hehe, kenn ich. :P
Die Gif Dateien sind im Anhang (wenn du dich fragst was die Textur darstellen soll: es ist eine TEST-Textur. ;)).


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 20:00 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Vorneweg: Doppelpost muss sein (sonst weiß ja keiner das hier ein neuer Eintrag ist. ;) ).

Mir ist grade eingefallen das bei "bmp" keine Monochrom Texturen abgedeckt sind, da hat ja ein Pixel eigentlich nur 1 BIT groß, aber der Parameter der die Größe eines Pixels angibt ist ja in BYTES, wie soll man das umsetzen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 21:43 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ja, also das sieht in der Tat merkwürdig aus.
Gerade hab ich aber das gelesen: http://www.libsdl.org/cgi/docwiki.cgi/SDL_Color
Woraus man entnehmen kann das SDL_Color 4 Byte groß ist. Das 4te Byte steht da als unused. Wozu das dann eigentlich gut sein soll versteh ich aber nicht so richtig, vielleicht das man das ganze dann leichter in 32Bit-Farben umwandeln kann, kA.

Für den Quelltext den ich gepostet hatte bedeutet das dann das in der Zeile
Code:
  1.  
  2. GIF_Pixel[i]:=PRGBColor(Integer(TexturFormat^.Palette^.Colors)+GIF_Index^*3)^;
  3.  

die 3 in eine 4 geändert werden muss.

Vielleicht funktioniert es dann ja.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 11, 2009 22:13 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Der 4. Index ist unused. So kann man unter anderem Alpha behandeln, und die Geschwindigkeit leidet nicht, dass 24 Bit kopieren muss etc.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 12, 2009 10:26 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Also das mit GIF geht leider immernoch nicht (Textur ist weiß).
Für Monochrom find ich auch keine passenden Parameter.

Allerdings hab ich rausgefunden das man eigentlich mittels Textur.Format.Palette rausfinden kann ob eine Palette vorhanden ist (wenn Palette = Nil ist dann gibts keine, wenn es <> Nil ist dann gibt es eine).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 12, 2009 17:58 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
8 Bit -> Palette, > 8 Bit -> keine Palette

OpenGL kennt GL_LUMINANCE, was 8 Bit entspricht.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 15 Queries | GZIP : On ]