DGL
https://delphigl.com/forum/

Shader zusammensetzen
https://delphigl.com/forum/viewtopic.php?f=20&t=11749
Seite 1 von 1

Autor:  mathias [ So Okt 01, 2023 14:51 ]
Betreff des Beitrags:  Shader zusammensetzen

Ich habe folgendes compiliert und das Shader erstellen geht ohne Probleme, es kommt nicht mal eine Warnung.
Obwohl ich 2 Vertex-Shader angegeben habe.
vertexshader.glsl
Code:
  1. #version 450 core
  2. layout (location = 0) in vec4 vPosition;
  3. void main() {
  4. //  mainXXX();
  5.   gl_Position = vPosition;}  


test.glsl
Code:
  1. #version 450 core
  2. layout (location = 0) in vec4 vPosition;
  3. void mainXXX() {
  4.   gl_Position = vPosition; }    


Lazarus:
Code:
  1.     MyShader := TShader.Create([
  2.       GL_VERTEX_SHADER, FileToStr('Vertexshader.glsl'),
  3.       GL_VERTEX_SHADER, FileToStr('test.glsl'),
  4.       GL_FRAGMENT_SHADER, FileToStr('Fragmentshader.glsl')]);

Dies funktioniert aber nur solange, wen im 2. Shader nicht main() steht.


Da bin ich auf folgende Idee gekommen:
Code:
  1. #version 450 core
  2. void main() {
  3.   mainXXX(); }  

Code:
  1. #version 450 core
  2. layout (location = 0) in vec4 vPosition;
  3. void mainXXX() {
  4.   gl_Position = vPosition;}

Das wird aber mit dem Fehler quittiert, das er meinXXX() nicht findet.

Nun zur Frage, ist sowas überhaupt möglich ?
Wen nein, wieso wird dann überhaupt die Source mit mainXXX() compiliert ?

Autor:  Phobeus [ Di Nov 05, 2024 06:50 ]
Betreff des Beitrags:  Re: Shader zusammensetzen

Nun, wenn Du zwei einesetzt, wird er den ersten vermutlich mit dem zweiten Überschreiben und entsprechend die Funktionen aus dem ersten nicht mehr kennen. Ich habe mir damals damit beholfen eine Art eigenes Include dafür zu schreiben. Also z.B. ein "#include myfile" eingebaut. Als der Shader-Source gelesen wurde, habe ich nach dem Pattern gesucht, das weitere File angelesen und an der Stelle im Code eingefügt bevor es zum Kompilieren an den Treiber gegangen ist. Dadurch konnte man Methoden und Funktionen über mehrere Shader hinweg anwenden.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/