Hallo,
mein eigentliches Ziel ist es verschiedene Grafik APIs zu vereinheitlichen, nun bin ich an den Punkt an dem ich Shader support für den Endnutzer einbauen will. Dafür gibt es ja verschiedene Ansätze:
Von der ersten Methode sehe ich allerdings ab, da der Aufwand viel zu hoch ist, und ich wahrscheinlich trotzdem nicht an die Vielfallt des nativen Shadercodes heran komme. Die zweite Methode spricht eigentlich gegen mein Konzept da so Redundanz ensteht und der Benutzer den Code an die spezifischen APIs anpassen muss. Allerdings habe ich mir dazu ein kleines Konzept ausgedacht:
Die dritte Möglichkeit ist wohl die Fehleranfälligste, und ich kenne keine 3rd Party Lib die alle HLSL Versionen unterstützt.
Habt ihr Ideen wie man das noch anders umsetzen könnte?
mein eigentliches Ziel ist es verschiedene Grafik APIs zu vereinheitlichen, nun bin ich an den Punkt an dem ich Shader support für den Endnutzer einbauen will. Dafür gibt es ja verschiedene Ansätze:
- Abstrahierte Shader Sprache die sich zu HLSL und GLSL umwandeln lässt
- Der Benutzer muss Shader für jede API schreiben
- Automatische Umwandlung von GLSL <-> HLSL
Von der ersten Methode sehe ich allerdings ab, da der Aufwand viel zu hoch ist, und ich wahrscheinlich trotzdem nicht an die Vielfallt des nativen Shadercodes heran komme. Die zweite Methode spricht eigentlich gegen mein Konzept da so Redundanz ensteht und der Benutzer den Code an die spezifischen APIs anpassen muss. Allerdings habe ich mir dazu ein kleines Konzept ausgedacht:
XML-Quellcode
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <Shaders>
- <Shader Name="testshader" Type="Sharpex2D.Rendering.DirectX.DirectXGraphicsManager">
- <Techniques>
- <Technique Name="Test">
- <!-- HLSL code -->
- </Technique>
- </Techniques>
- </Shader>
- <Shader Name="testshader" Type="Sharpex2D.Rendering.OpenGL.OpenGLGraphicsManager">
- <Techniques>
- <Technique Name="Test">
- <!-- GLSL code -->
- </Technique>
- </Techniques>
- </Shader>
- </Shaders>
Die dritte Möglichkeit ist wohl die Fehleranfälligste, und ich kenne keine 3rd Party Lib die alle HLSL Versionen unterstützt.
Habt ihr Ideen wie man das noch anders umsetzen könnte?