glBitmap.pas

Bei der Unit glBitmap handelt es sich um einen Texturen Loader der ursprünglich nur für Windows (Delphi) verfügbar war. Die Idee dazu kam mir vor einigen Jahren, da mir die bestehenden Loadern nicht komplex genug waren. Mittlerweile unterstützt die Unit die gebräuchlichsten Datei und Texturformate. Die aktuelle Version bietet auch Unterstützung für FreePascal und somit auch für Linux.

Eine ausführliche Dokumentation zur glBitmap gibt es nur bedingt. Denn die Dokumentation im Wiki von DGL ist seit geraumer Zeit nicht mehr aktuell und es wird noch eine Weile dauern bis ich die Zeit finde sie entsprechend zu überarbeiten.

Unterstützte Dateiformate:

  • TARGA (*.tga)
    • 8, 16, 24 und 32 Bit
    • komprimiert und unkomprimiert
    • Ursprung oben links und unten links
  • JPEG (*.jpg)
    • Graustufen und RGB
  • Windows Bitmaps (*.bmp)
    • 8 (ignoriert Palette), 16, 24, 32 Bit
  • Portable Network Graphic (*.png)
    • Graustufen oder RGB mit oder ohne Alphakanal
  • Direct Draw Surfaces (*.dds)
    • 8, 16 24, 32 Bit; DXT1, DXT3, DXT5
    • Keine Cubemaps
    • Keine MipMaps

Hinweise zur Benutzung

Texturausrichtung

Der Loader erzeugt alle Texturen Top-Down. Das bedeutet die oberste Zeile der Textur befindet sich als Erstes im Speicher. Dieses Verhalten ist gegensätzlich zu einigen Loadern für Delphi, zu Windows Bitmap und auch zu einige Modeleditoren/Modelformat. Da ich es persönlich so angenehmer finde und sie an einigen Stellen innerhalb OpenGLs vorrausgesetzt werden, erzeuge ich nur Top-Down Texturen. Dies kann unter Umständen zu Verwirrungen führen. Es gibt aber genügend Möglichkeiten die Texturen zu manipulieren.

Konfiguration externer Schnittstellen

Ab der Version 2.0.0 unterstützt die glBitmap verschiedene Bilbiotheken und Schnittstellen zum Texturdatenaustausch. Da nicht dauerhaft alle aktiv sein können muss man zu Begin erst einmal konfigurieren welche man benutzen möchte. Auf diesen Sachverhalt weiß die glBitmap einem auch mit einer Compilerwarnung hin. Darauf sollte man hören. ;) Zu Auswahl stehen folgende Mögichkeiten.

  • GLB_NO_NATIVE_GLfrüher auch (NO_NATIVE_GL)
  • GLB_SDL
    • Aktiviert die Unterstützung von SDL Surfaces zum Austausch von Texturdaten.
  • GLB_DELPHI
    • Aktiviert die Unterstützung von Delphi TBitmaps zum Austausch von Texturdaten.
  • GLB_SDL_IMAGE
    • PNGs und JPEGs werden mit SDL_image geladen. Dabei wird GLB_SDL automatisch aktiviert und alle anderen Bibliotheken für PNG und JPEG deaktiviert. SDL_image unterstützt nur das Lesen von PNGs und JPEGs.
  • GLB_PNGIMAGEfrüher auch (pngimage)
    • Benutzt die Bibliothek PNGImage zum Lesen und Schreiben von PNGs. GLB_PNGIMAGEschließt GLB_LIB_PNGautomatisch aus. Die Bibliothek PNGImage wurde mittlerweile von Codegear, für Delphi 2009, aufgekauft und darf nicht mehr zum freien Download angeboten werden. Entsprechend ist die originale Webseite nicht mehr verfügbar. Der Code wird vermutlich so direkt auch nicht Delphi 2009 funktionieren.
  • GLB_LIB_PNG
    • Benutzt die Referenzbibliothek libPNG zum Lesen und Schreiben von PNGs. Dabei werden unter Windows noch zwei zusätzliche DLLs benötigt.
  • GLB_DELPHI_JPEG
    • Benutzt die in Delphi eingebaute Implementation zum Lesen und Schreiben von JPEGs. GLB_DELPHI_JPEGschließt GLB_LIB_JPEGautomatisch aus.
  • GLB_LIB_JPEG
    • Benutzt die Referenzbibliothek libJPEG zum Lesen und Schreiben von JPEGs. Dabei wird unter Windows noch eine zusätzliche DLL benötigt.

Aufgrund von Änderungen meiner persönlicher Interessen wird dieses Projekt nicht weiter fortgeführt.

Download Header

Aktuelle Version: 2.0.3 (21-03-2010) (history)

Download glBitmap.zip (37 kb)

Je nach Konfiguration der Unit werden folgende Quellen benötigt:

 

Kommentare

Kompatibilität zu Delphi 2009

Weil es damals Probleme mit den Neuerungen in Delphi 2009 gab (irgendwas mit Chars), habe ich in letzter Zeit die ziemlich veraltete Textures.pas benutzt.
Wurden diese Kompatibilitätsprobleme inzwischen behoben oder wird das in absehbarer Zeit noch geschehen?

Da war doch was

Ich hatte irgendwann schon mal was in diese Richtung gemacht. Ich meinte das hätte bei mir sogar schon alles funktioniert. Aber so wie es scheint muss ich das Problem wohl aus den Augen verlohren haben. ;) Ich werde mich die Tage darum kümmern.