Registriert: Mi Mär 09, 2005 15:54 Beiträge: 372 Wohnort: München
Programmiersprache: Delphi, C#, FPC
Hallo allerseits,
ich habe folgendes Problem: Ich wollte mein Texturformat etwas moderner gestalten und hab mir das DDS-Format mal angeschaut (vor allem, weil glBitmap damit auch schon umgehen kann ). Jetzt wollt ich aber die Texturen komprimieren. Dafür habe ich entweder die Möglichkeit alles mit Photoshop und dem nVidia-Plugin zu machen (sehr zeitaufendig - daher bähbäh), oder es per Quelltext oder per dll in mein Programm selbst mit einzufügen.
Kennt jemand eine DLL, die das bereits kann (bitte mit Header), oder sogar Quelltext? Das wäre echt super, da ich so meine Lightmaps gleich komprimieren könnte.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Eigentlich kannst du so was auch mit OpenGL machen. Wobei das NVidia Plugin aber deutlich bessere Qualität bieten sollte. Und zwar kannst du beim Erstellen der Textur als internes Format auch so etwas wie GL_COMPRESSED_RGB_S3TC_DXT1_EXT übergeben. Und anschließend kannst du die Daten mittels glGetCompressedTexImage aus der Karte laden. Das ganze musst du dann nur noch in ein DDS verpacken und gut.
Das Erste und Zweite geht auch mit der glBitmap. Vor dem Erstellen kannst du das Format auf tfCompressed setzen und runterladen geht mit GetDataFromTexture. Allerdings kann ich keine Komprimierten DDS abspeichern. Das Format ist allerdings sehr simpel. Hatte es nur aus Bequemlichkeit weggelassen.
Registriert: Mi Mär 09, 2005 15:54 Beiträge: 372 Wohnort: München
Programmiersprache: Delphi, C#, FPC
Das werd ich so bald wie möglich ausprobieren - und anhand der "LoadDDS" und "SaveDDS" - Routine in der glBitmap.pas kann ich sicher die komprimierten Daten speichern. Aber noch etwas zu dem tfCompressed : in welchem Format werden die Texturen dann hochgeladen? DXT1, -3 oder -5? Oder ganz ein anderes? Wenn ich "Compressed" angebe, kann ich aus "InternalFormat" nicht ablesen, in welchem Format die Daten jetzt vorliegen, da immer RGB8 als Ergebniss kommt. Erwarten müsste ich doch eigentlich DXT... oder? Man, das mit den Texturen ist zwar schon eine feine Sache, aber so ganz blick ich da noch nicht durch ...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Bei dem Hochladen hast du 2 Formate. Ein mal das InternalFormat und dann die Kombination aus Format und Type.
Format und Type: Gibt an in welchem Format die Bilddaten vorliegen. Also welche Kanäle es besitzt und welches Format die Kanäle besitzen. Unsigned Byte etc.
InternalFormat: Gibt an welches Format die Textur haben soll. Der Treiber konvertiert die Daten in das entsprechende Format.
Hochladen würdest du die Daten ganz normal als unkomprimierte Daten. Allerdings durch die Angabe von GL_COMPRESSED_RGB_S3TC_DXT1_EXT (Oder entsprechend passendes) als internes Format weißt du dem Treiber an die Daten zu konvertieren bzw zu komprimieren. Wenn du komprimierte Daten hochladen willst musst du ja auch glCompressedTexImage2D benutzen.
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.