Seite 1 von 1
Shader als Embedded Resources
Verfasst: 28.09.2013, 20:11
von Herror
Hallo,
wollte gerade ein paar Shader schreiben und habe in einem Buch gelesen, dass man Shader auch wunderbar als Embedded Resources ins Projekt einbinden kann, damit man einzelne Shader als Textfiles zur Designzeit hat und nach dem Kompilieren hat man die Shader zur Laufzeit in der Executable/DLL/Lib eingebettet.
Ich bin gerade auf der Suche nach ein paar Dokumentationen zu dem Thema, aber finde irgendwie nichts wirklich sauberes.
Ich habe Samples für C#, würde es aber gerne in C++ unter Visual Studio implementieren. Hat jemand zufällig schon einmal etwas ähnliches probiert und einen kleinen Blog-Post dazu oder ein Sample, das ich mir anschauen kann?
Re: Shader als Embedded Resources
Verfasst: 28.09.2013, 20:22
von Krishty
HLSL-Shader und Visual Studio 2012?
Re: Shader als Embedded Resources
Verfasst: 28.09.2013, 20:27
von Herror
Nope, Ich verwende OpenGL.
Also benutze ich CG oder GLSL.
Aber ja. Ich verwende Visual Studio 11
Ist daran irgendwas verwerflich? ;)
Re: Shader als Embedded Resources
Verfasst: 28.09.2013, 20:30
von Krishty
Nein. Aber für HLSL hat Visual Studio 2012 eingebauten Support samt automatischer Kompilierung und intelligenten Fehlermeldungen. Für GLSL kann ich dir leider nicht weiterhelfen.
Nachtrag: Aber falls jemand anders diesen Thread liest, liste ich es hier mal für HLSL auf:
- Deine Shader-Quelldatei muss die Endung .hlsl haben; z.B. my shader.hlsl.
- Füge sie dem Projekt hinzu (z.B. durch Drag'n'Drop).
- Rechtsklick auf die Datei im Solution Explorer -> Properties -> HLSLCompiler -> General: Du musst Shader Type und Shader Model sinnvoll auswählen.
- in Properties -> HLSLCompiler -> Output Files: Einen C-Variablennamen für deinen Shader eingeben, z.B. pixelShaderBytecode. In Header File Name einen Dateinamen eintragen, z.B. %(Filename).hpp. Object File Name leeren.
- OK klicken.
- Rechtsklick auf die Datei im Solution Explorer -> Compile. Jetzt wird dein Shader kompiliert; etwaige Fehlermeldungen beheben.
- In der C++-Quelldatei, in der du den Shader benutzen willst, das #include "my shader.hpp".
- Jetzt übergibst du CreateXXXShader() die Header-Variable (in unserem Fall pixelShaderBytecode) und ihre Länge (sizeof pixelShaderBytecode).
- Die Einstellungen für die Release-Version und andere Plattformen wiederholen.
- Visual C++ wird die Shader nur neukompilieren wenn es nötig ist.
Re: Shader als Embedded Resources
Verfasst: 28.09.2013, 21:18
von Herror
Habe es irgendwie durch rumprobieren selbst hinbekommen.
Bei Interesse kann ich den Vorgang gerne nochmal posten.
Ich finde Visual Studio sollte sowas eigentlich von haus aus unterstützen ohne, dass man sich das irgendwie selber zusammenhacken muss ^^
Finde ich eigentlich schade, dass Textdateien nicht über das Interface als Embedded Resources eingebunden werden können.