25 Mai 2014

Laden von Texturen auch auf Windows Phone

SkyboxDirectX auf Windows Phone hat zwar zu einem großen Teil die gleiche API, wie auf dem Desktop, drum herum ist es aber z. T. stark eingeschränkt. Neben den Punkten aus den letzten Blog-Beiträgen (z. B. fehlendes Direct2D) hatte ich zusätzlich das Problem, dass ich bis jetzt fast durchweg png Dateien als Texturen verwendet habe. Grundsätzlich ja kein blöder Gedanke: Ein einfaches Dateiformat, welches man auch mit jedem Bildbearbeitungsprogramm bearbeiten und auch problemlos in eigenen Programmen verwenden kann. Auf dem Windows Phone funktioniert das aber nicht, da hierfür ausschließlich Texturen im dds Format zulässig sind. Daraus entstanden für mich im Wesentlichen zwei Probleme: Wie werden andere Dateiformate in dds konvertiert und wie können diese Dateien im Programm geladen werden?

Das Konvertieren der bestehenden Texturen war letzten Endes viel einfacher, als ich gedacht habe. Zugegeben, es war reiner Zufall: Ich wollte eigentlich gerade noch für ein anderes Thema ein Bild speichern und dann ist mir im Speichern-Dialog von Paint.Net aufgefallen, dass hier Bilder auch im dds Format gespeichert werden können. Nachfolgend ein Screenshot dazu.DDS-Support in Paint.Net

Das nächste Problem war etwas schwieriger. In SharpDX gibt es (ohne Toolkit) leider keine Möglichkeit, direkt Texturen aus dds Dateien zu laden. Wird Google gefragt, so stößt man relativ schnell auf die Funktion D3DX11CreateShaderResourceViewFromFile, welche allerdings ebenfalls nicht in SharpDX verfügbar ist. Das Toolkit von SharpDX unterstützt aber scheinbar dds Texturen per Texture2D.Load. Ich persönlich verwende aber das Toolkit praktisch gar nicht, was die Verwendung dieser Methode schwierig macht, da sie z. B. ein GraphicsDevice benötigt, das über das Toolkit angelegt wurde. Aber dennoch: In den Quellcodes von SharpDX kann man sehen, dass Texture2D.Load im Hintergrund eine Image-Klasse verwendet, um die Bilddaten zu laden. Diese Image-Klasse kann unabhängig vom Rest des Toolkits verwendet werden, was sie für mich sehr interessant macht. So ganz nebenbei unterstützt dieser Weg auf den anderen Plattformen (Desktop, WinRT) alle relevanten Bildformate und funktioniert reibungslos. Aus diesem Grund ist dies bei mir nun auch der Standard-Weg, um Texturen zu laden. Nachfolgend das Coding, mit dem ich aktuell dss Texturen laden kann.


Schlagwörter: ,
Copyright 2019. All rights reserved.

Verfasst 25. Mai 2014 von Roland in category "Direct3D

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.