DirectDraw Surface (*.dds) Laden
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
DirectDraw Surface (*.dds) Laden
Hey ho Leute,
ich suche derzeit eine Möglichkeit DirectDraw Surface Texturdateien zu laden. Ich möchte sie lediglich laden und Anzeigen können, ohne DirectX oder OpenGL.
Nun habe ich dafür außer Imaging Lib noch nichts gefunden, und diese Funktioniert scheinbar mit neuere Lazarusversionen nicht (Ich kann nach der Installation keine Grafiken mehr anzeigen lassen).
Kennt ihr vielleicht noch eine Bibliothek zum Laden des DDS Formats, ich bräuchte nur eine Möglichkeit es zu Laden, und als Bitmap wieder zwischenzuspeichern zum Anzeigen. Es würde schon reichen wenn ihr eine Möglichkeit kennen würdet wie ich auf die Pixel Daten zugreife. Nun leider ist das DDS Format recht Komplex, und ich habe mich mit Grafikformaten sowieso noch nicht allzusehr auseinander gesetzt.
Vielleicht kennt wer von euch ja eine gute Bibliothek.
Grüße Fred
ich suche derzeit eine Möglichkeit DirectDraw Surface Texturdateien zu laden. Ich möchte sie lediglich laden und Anzeigen können, ohne DirectX oder OpenGL.
Nun habe ich dafür außer Imaging Lib noch nichts gefunden, und diese Funktioniert scheinbar mit neuere Lazarusversionen nicht (Ich kann nach der Installation keine Grafiken mehr anzeigen lassen).
Kennt ihr vielleicht noch eine Bibliothek zum Laden des DDS Formats, ich bräuchte nur eine Möglichkeit es zu Laden, und als Bitmap wieder zwischenzuspeichern zum Anzeigen. Es würde schon reichen wenn ihr eine Möglichkeit kennen würdet wie ich auf die Pixel Daten zugreife. Nun leider ist das DDS Format recht Komplex, und ich habe mich mit Grafikformaten sowieso noch nicht allzusehr auseinander gesetzt.
Vielleicht kennt wer von euch ja eine gute Bibliothek.
Grüße Fred
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: DirectDraw Surface (*.dds) Laden
http://wiki.delphigl.com/index.php/Texture_Loader
glBitmap.pas ist zwar für OpenGL, aber da findest du jedenfalls einen Loader für DDS.
Andere Libs, die DDS können fallen mir gerade nicht ein.
(Weiß jemand, ob TPicture das unterstützt???)
MFG
Komoluna
glBitmap.pas ist zwar für OpenGL, aber da findest du jedenfalls einen Loader für DDS.
Andere Libs, die DDS können fallen mir gerade nicht ein.
(Weiß jemand, ob TPicture das unterstützt???)
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: DirectDraw Surface (*.dds) Laden
Damit habe ich es jetzt auch mal probiert:
Bei BMP dateien kein Problem, bei DDS Dateien kommt der Fehler:
Versuche ich vor dem Speichern die Methode ConvertTo(tfBGR8ub3) // Ein Bitmap Format
kommt der Fehler
Grüße
Fred
Code: Alles auswählen
procedure glBitmapLoad(Path: string; g: TGraphic);
var
ms: TMemoryStream;
ddsData: TglBitmapData;
tmpBmp: TBitmap;
begin
tmpBmp := TBitmap.Create;
try
ms := TMemoryStream.Create;
try
ddsData := TglBitmapData.Create(Path);
try
ddsData.SaveToStream(ms, ftBMP);
finally
ddsData.Free;
end;
ms.Seek(0, soFromBeginning);
tmpBmp.LoadFromStream(ms, ms.Size);
finally
ms.Free;
end;
if Assigned(g) then
g.Assign(tmpBmp);
finally
tmpBmp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap := TBitmap.Create;
if OpenDialog1.Execute then
glBitmapLoad(OpenDialog1.FileName, Image1.Picture.Graphic);
end;
Bei dem Speichern als BMP (SaveToStream). Speichern ins Raw Format funktioniert, das kann TPicture aber auch nicht lesen.unsupportet format: tfs3tcDtx1RGBA
Versuche ich vor dem Speichern die Methode ConvertTo(tfBGR8ub3) // Ein Bitmap Format
kommt der Fehler
Leider kenne ich mich mit Bild Fomaten nicht sehr gut aus, und weiß nicht was ich hier machen soll (noch dazu ist die Unit glBitmap recht schwach dokumentiert).compressed formats are not supported tfS3tcDtx1RGBA
Grüße
Fred
-
- Beiträge: 98
- Registriert: Di 15. Nov 2011, 11:36
Re: DirectDraw Surface (*.dds) Laden
Hey,
die aktuelle glBitmap ist zum größten Teil auf meinem Mist gewachsen. Wie die Meldungen dir schon sagen:
- Bitmap speichern geht nicht, weil Bitmap das DDS Format nicht unterstützt
- Konvertieren ist der richtige Weg, aber die glBitmap kann die kompremierten Formate nur an OpenGL weitergeben. Eine Bearbeitung (bzw. Konvertierung) der Daten ist deshalb nicht möglich.
Wenn ich mal Zeit hab kann ich mir ja mal ansehen wie die Kompremierung bei DDS gelöst ist und das ConvertTo entsprechend anpassen.
MfG Bergmann.
die aktuelle glBitmap ist zum größten Teil auf meinem Mist gewachsen. Wie die Meldungen dir schon sagen:
- Bitmap speichern geht nicht, weil Bitmap das DDS Format nicht unterstützt
- Konvertieren ist der richtige Weg, aber die glBitmap kann die kompremierten Formate nur an OpenGL weitergeben. Eine Bearbeitung (bzw. Konvertierung) der Daten ist deshalb nicht möglich.
Wenn ich mal Zeit hab kann ich mir ja mal ansehen wie die Kompremierung bei DDS gelöst ist und das ConvertTo entsprechend anpassen.
MfG Bergmann.
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: DirectDraw Surface (*.dds) Laden
http://wiki.freepascal.org/Graphics_libraries
Wenn Vampyre bei dir nicht funzt (evtl mal SVN/Git whatever probieren), könntest du evtl mal bei Code Typhoon gucken da sollte die dabei sein.
Nennt sich halt dann pl_irgendwie.
Sonst mal Castle Game Engine anschauen ob der es hergibt.
Wenn Vampyre bei dir nicht funzt (evtl mal SVN/Git whatever probieren), könntest du evtl mal bei Code Typhoon gucken da sollte die dabei sein.
Nennt sich halt dann pl_irgendwie.
Sonst mal Castle Game Engine anschauen ob der es hergibt.
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: DirectDraw Surface (*.dds) Laden
So ich habe jetzt mal versucht, da ich die Graphik nur darstellen will diese per OpenGl Context zu rendern, bin aber auch Dar auf ein kleines Problem gestoßen, wie verwende ich den dglOpenGL header in lazarus? Jedes mal wenn ich damit versuche einen gl Befehl auszuführen (z.b. glEnable) bekomme ich einen Fehler( bin grade am Handy, wenn ich wieder am pc bin schreib ich welchen) .
mit den lazarus headern (gl, glu, Glut units) funktioniert alles wunderbar. Nun ich bin nicht grade ein gl Profi, um ehrlich zu sein, ausser einem Pong habe ich noch nichts groß damit gemacht
mit den lazarus headern (gl, glu, Glut units) funktioniert alles wunderbar. Nun ich bin nicht grade ein gl Profi, um ehrlich zu sein, ausser einem Pong habe ich noch nichts groß damit gemacht
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: DirectDraw Surface (*.dds) Laden
Hast du
bei, Programmstart aufgerufen?
Wenn die Lib nicht geladen is wird das auch nix.
MFG
Komoluna
Code: Alles auswählen
InitOpenGl;
ReadImplementationProperties;
ReadExtensions;
Wenn die Lib nicht geladen is wird das auch nix.
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: DirectDraw Surface (*.dds) Laden
Danke, habe ReadImplementationProperties; vergessen