Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jun 26, 2024 11:42

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Nov 09, 2013 12:12 
Offline
DGL Member

Registriert: Mi Nov 17, 2010 15:31
Beiträge: 14
Programmiersprache: C, ASM, C++
Hallo zusammen,

meine Frage bezieht sich zwar auf Shader, aber sollte dennoch in den Einsteigerbereich fallen.

Ich habe ein Problem mit zwei sehr einfachen Shaders (Vertex, Fragment). Diese sehen wie folgt aus:

Code:
  1.  
  2. #version 430 core
  3.  
  4. layout(location = 1) in vec4 offset;
  5. layout(location = 2) in vec4 color;
  6.  
  7.  
  8. out VS_OUT
  9. {
  10.     vec4 col;
  11. } vs_out;
  12.  
  13. void main(void)
  14. {
  15.     const vec4[3] vertices = vec4[3](
  16.                                 vec4(0.25f, 0.25f, 0.0f, 1.0f),
  17.                                 vec4(0.25f, -0.25f, 0.0f, 1.0f),
  18.                                 vec4(-0.25f, -0.25f, 0.0f, 1.0f)
  19.                               );
  20.     vs_out.col = color;
  21.     gl_Position = vertices[gl_VertexID] + offset;
  22. }
  23.  
  24.  

Code:
  1.  
  2. #version 430 core
  3.  
  4. out vec4 color;
  5.  
  6. in VS_OUT
  7. {
  8.     vec4 col;
  9. } vs_in;
  10.  
  11.  
  12. void main(void)
  13. {
  14.     color = vs_in.col;
  15. }
  16.  
  17.  


Wenn ich die so laufen lassen, dann bekomme ich einen Parser Error der folgenden Art:
Zitat:
"Program build error (in CompileShader, Shader ''): OpenGL shading language compilation error. Vertex shader failed to compile with the following errors:
ERROR: 0:22: error(#132) Syntax error: "texID" parse error
ERROR: error(#273) 1 compilation errors. No code generated."


Komisch ist allerdings, dass wenn ich ausschließlich im Vertex Shader den Interface Block in der folgenden Art ändere, dann funktioniert das Programm einwandfrei:

Code:
  1.  
  2. out VS_OUT {
  3.     vec4 col;
  4. } vs_out;
  5.  


Ich kann aber in keinster Weise nachvollziehn was da falsch läuft. Ich nutze c++ in Verbindung mit oglplus. Ich wäre sehr dankbar für eine kleine Hilfestellung.


Meiner


Zuletzt geändert von Meiner am Sa Nov 09, 2013 13:18, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Nov 09, 2013 13:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Verstehe ich dich richtig, dass du keinen Fehler bekommst, wenn du
Code:
  1. in VS_OUT {
  2.   vec4 col;
  3. } vs_out;
im Vertexshader schreibst?

GLSLangSpec.4.40.pdf hat geschrieben:
It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader; these uses are reserved for future use.
Nach der GLSL Spec müsste es einen Fehler geben, wenn du das tust. Außerdem möchtest du die Farbe doch an den Fragmentshader weitergeben und nicht aus dem VBO lesen, weshalb ich nicht verstehe, warum du in schreibst.

Ansonsten: Spricht irgendwas dagegen, den Interface-Block einfach gegen
Code:
  1. out vec4 col;
auszutauschen?

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Nov 09, 2013 13:18 
Offline
DGL Member

Registriert: Mi Nov 17, 2010 15:31
Beiträge: 14
Programmiersprache: C, ASM, C++
Ah, ich habe da einen Fehler im obigen Text gemacht, ich habe es oben auch korrigiert. Die Änderung sieht natürlich wie folgt aus:

Code:
  1.  
  2. out VS_OUT {
  3.     vec4 col;
  4. } vs_out;
  5.  


Ansonsten hast du mich richtig verstanden. Ändere ich die Klammerung dieses Blocks, läuft das Programm.

Es spricht nichts gegen die einfachere Variante, die auch einwandfrei funktioniert. Allerdings arbeite ich gerade die OpenGL Superbible 6 durch, wo ich gerne auch jedes Beispiel zum Laufen bringen möchte.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Nov 09, 2013 14:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Ich schätze, du machst irgendwas beim Laden oder Übergeben des Shadercodes an den Treiber falsch. Darauf deutet auch die Fehlermeldung hin:
Zitat:
ERROR: 0:22: error(#132) Syntax error: "texID" parse error

Eine Variable texID kommt im Code ja gar nicht vor und ist lediglich Teil des Strings "gl_VertexID". Hast du mal einen Haltepunkt bei glShaderSource gesetzt und dir vom Debugger den Code-String ausgeben lassen?

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Nov 09, 2013 14:46 
Offline
DGL Member

Registriert: Mi Nov 17, 2010 15:31
Beiträge: 14
Programmiersprache: C, ASM, C++
Nein, werde ich gleich mal nachholen. Da ich den Dateinamen im Prinzip nur oglplus übergebe, könnte eigentlich nur dort etwas falsch laufen schätze ich.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Nov 09, 2013 16:01 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
http://www.arcsynthesis.org/gltut/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Nov 09, 2013 16:09 
Offline
DGL Member

Registriert: Mi Nov 17, 2010 15:31
Beiträge: 14
Programmiersprache: C, ASM, C++
Ein Hinweis, inwieweit mir der Link bei meinem Problem hilft, wäre sehr hilfreich.

EDIT: So, nach vielen weiteren Versuchen denke ich, dass die Shaderdatei irgendwie korrupt gewesen sein muss. Copy + Paste hat das Problem wohl immer mit in die neu angelegten Dateien gebracht. Nachdem ich den Vertexshader von Grund auf in eine neue Datei geschrieben habe, scheint es nun reibungslos zu funktionieren (zumindest noch...).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.044s | 17 Queries | GZIP : On ]