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

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

1

18.10.2016, 09:44

[OpenGL] Uber shader

Hallo Zusammen,

ich möchte mir einen uber shader bauen, so dass ich mit defines mir alle Permutationen generieren lassen kann. Ich bin mir nicht ganz sicher, wie man das im Detail umsetzt. Hierbei habe ich zwei Dateien:

Quellcode

1
2
uber_vertexShader.glsl
uber_pixelShader.glsl


Diese lade ich jeweils mit glCreateShader(), glShaderSource() und glCompileShader(). Soweit ich weiß kann man einfach einen extra "shader" am Anfang dazuladen, der die defines für die entsprechender Shader-permutation definiert. Danach werden sie ja an ein Programm gebunden und gelinkt. Stimmt das so? Oder muss ich die defines textuell vor den Shadercode anhängen und kompilieren? Nach recherchieren scheint das doch ein eher nicht so einheitlich behandeltest Thema zu sein.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

18.10.2016, 09:58

Soweit ich weiß kann man einfach einen extra "shader" am Anfang dazuladen, der die defines für die entsprechender Shader-permutation definiert. Danach werden sie ja an ein Programm gebunden und gelinkt. Stimmt das so?

So hab ich das auch immer gemacht, das sollte also auf jeden Fall funktionieren...

Edit: Kann nur sein, dass du mit der Platzierung der #version Direktive aufpassen musst (GLSL verlangt, dass die das erste ist, was in deinem Code steht). Ich bin mir grad nimmer sicher, wie glShaderSource() sich im Fall von multiplen Sources genau verhält was das angeht...

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

18.10.2016, 10:19

Hab jetzt nur noch nicht richtig verstanden, wo ich diese info dazupacken muss: Vor dem Compile der jeweiligen Shader oder tatsächlich als compilierter "shader" beim linken des Programms?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

18.10.2016, 10:21

glShaderSource() nimmt ein Array von Strings. Du übergibst deine #defines einfach dort als erstes Array... ;)

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

18.10.2016, 10:21

Phantastisch, das meinte ich. Vielen Dank! ;)

Werbeanzeige