Shader als Embedded Resources

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Herror
Beiträge: 97
Registriert: 24.12.2009, 23:13
Benutzertext: Ewiger Anfänger....
Alter Benutzername: Herror
Echter Name: Artur Schütz
Kontaktdaten:

Shader als Embedded Resources

Beitrag 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?
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Shader als Embedded Resources

Beitrag von Krishty »

HLSL-Shader und Visual Studio 2012?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Herror
Beiträge: 97
Registriert: 24.12.2009, 23:13
Benutzertext: Ewiger Anfänger....
Alter Benutzername: Herror
Echter Name: Artur Schütz
Kontaktdaten:

Re: Shader als Embedded Resources

Beitrag von Herror »

Nope, Ich verwende OpenGL.
Also benutze ich CG oder GLSL.

Aber ja. Ich verwende Visual Studio 11

Ist daran irgendwas verwerflich? ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Shader als Embedded Resources

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Herror
Beiträge: 97
Registriert: 24.12.2009, 23:13
Benutzertext: Ewiger Anfänger....
Alter Benutzername: Herror
Echter Name: Artur Schütz
Kontaktdaten:

Re: Shader als Embedded Resources

Beitrag 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.
Antworten