Muss ich meine HLSL-Shader beim Portieren von XNA nach MonoGame neu schreiben?

7

Ich möchte ein XNA-Projekt portieren, das ich monogame muss, aber ich habe eine ganze Reihe von HLSL-Shadern. Es scheint, dass Monogame für PC OpenGL als Rendering-Backend verwendet, und ich möchte lieber nicht alle meine Shader während des Ports neu schreiben. Liege ich falsch und muss ich meine Shader während des Ports neu schreiben?

dazerdude
quelle

Antworten:

5

Nur wenn Sie Funktionen verwenden, die von der Zielplattform nicht unterstützt werden.

Wenn Sie Effektdateien aus einem früheren XNA-Projekt oder einem XNA-Beispiel verwenden möchten, müssen Sie diese mit dem MonoGame-Effektprozessor verarbeiten, um sie für diese bestimmte Plattform zu kompilieren . Einige von diesen verwenden OpenGL anstelle von DirectX als Grafik-API. Daher muss die Effektdatei von XNA in die OpenGL-Shader-Sprache konvertiert werden, damit sie funktioniert.

Anstatt Entwickler ihre Shader in GLSL umschreiben zu lassen, installiert MonoGame einige Tools, um die HLSL in der Effektdatei automatisch in die entsprechende Shader-Sprache für die Zielplattform zu konvertieren . Für die DirectX-basierten Plattformen verwendet MonoGame die DirectX 11-Toolkette, um Ihren Effekt in einen für diese Plattform optimierten Shader zu kompilieren. Bei OpenGL-basierten Plattformen wird der Effekt von einem Tool namens MojoShader verarbeitet, das eine einfache Konvertierung von HLSL in GLSL durchführt, mit der der Effekt auf dieser Plattform ausgeführt werden kann.

Natürlich kann dieser Konvertierungsprozess gelegentlich zu Fehlern oder nicht unterstützten Funktionen führen, die von der Zielplattform nicht unterstützt werden . Mit OpenGL Shader Model 3.0 können Sie beispielsweise keine Textur-Suche in einem Vertex Shader durchführen. Wenn Ihr Effekt diese Funktion verwendet, funktioniert dies wahrscheinlich nicht.

Quelle: Von XNA zu MonoGame

Nick Caplinger
quelle