2017-02-20 6 views
0

Ich muss ID3D11Texture2D Textur des Typs DXGI_FORMAT_R32G32B32A32_TYPELESS effizient zu einer Textur des Typs DXGI_FORMAT_B8G8R8A8_TYPELESS (oder einem anderen 32-Bit-RGBA-Typ) konvertieren. Grundsätzlich werden 128 Bit pro Pixel Textur auf 32 Bit pro Pixel reduziert. Sieht aus wie ID3D11DeviceContext :: CopyResource-Methode kann nicht mit einer solchen Formatkonvertierung umgehen. Soll ich einen Shader verwenden, um das zu erreichen? Wenn ja, kann der Shader mit der CopyResource-Methode verwendet werden oder muss ich die vollständige Rendering-Pipeline einrichten? Versucht, Konvertierung auf CPU, aber es ist viel zu langsam.Konvertieren von RGBA-Daten zwischen DXGI-Formaten

Antwort

1

Im Allgemeinen, der schnellste Weg, um diese Konvertierungen zu machen, die GPU zu verwenden, um ein 'Full-Screen-Quad' der Textur des Quellformats auf ein Renderziel des Zielformats zu rendern. Die Einschränkungen basieren auf der Direct3D-Hardwarefeature-Ebene, für die Renderzielformate unterstützt werden. Beispielsweise können Sie auf allen Feature-Levels mit modernen Treibern darauf zählen, dass DXGI_FORMAT_B8G8R8A8_UNORM als Renderziel unterstützt wird, jedoch nicht DXGI_FORMAT_B8G8R8A8_SNORM.

Siehe MSDN und Direct3D Feature Levels

Für eine CPU-basierte Rückfall für alle möglichen DXGI Formatkonvertierungen finden DirectXTex.

Verwandte Themen