Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

08.09.2012, 15:21

Problem mit dem Stringify Macro

Hi, ich möchte mit dem macro "#define STRINGIFY(x) #x" meinen Shader code als resource file in mein Projekt einbinden.
Mit den Windows-Resource files will ich das nicht machen, weil's sonst an ein OS gebunden wäre.
Aber leider übernimmt dieses Macro die new-line Character nicht mit '\n'.
Gibt's ne möglichkeit, dass der C-Prä-Prozessor das noch mit dazu nimmt?

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define STRINGIFY(x) #x

std::string ShaderCode = STRINGIFY(

#version 120

void main()
{
    gl_Position = ftransform();
}

);

// Da kommt leider folgendes bei raus:
"#version 120 void main() { gl_Position = ftransform(); }"

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.09.2012, 17:19

Ich fürchte, dass du das mit dem Präprozessor nicht wirklich hinbekommen wirst. Schreib dir einfach ein Tool, das deine Shaderdateien einliest und in .h + .cpp mit entsprechenden Stringkonstanten umwandelt (std::string würd ich dafür nicht verwenden, das einzige, was das in dem Fall wohl tut, ist, dass beim Programmstart sämtlicher Shadercode aus dem static Memory in dynamic Memory dupliziert wird) und bau das Tool in deinen Buildprozess ein.

3

08.09.2012, 19:38

Für unsere Info Übungen wurde ein CMake Script benutzt, dass in etwa so ausschaut:
http://code.mjdsystems.ca/p/equalizer/so…fyShaders.cmake

Also im Prinzip das, was dot meint, nur eben als fertige Lösung. Ob das schön ist, ist natürlich eine ganz andere Frage, ich mag es, wenn man Shader, die eh zur Laufzeit kompiliert werden, ändern kann, ohne das Programm neu kompilieren zu müssen (also als Textdatei zur Laufzeit laden). Angucken kann man sich den Shadersource eh, z.B. mit gDebugger.
Lieber dumm fragen, als dumm bleiben!

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

08.09.2012, 20:32

Alles klar, danke :)

Werbeanzeige