DGL
https://delphigl.com/forum/

Shader-Fehler: EOF
https://delphigl.com/forum/viewtopic.php?f=20&t=10687
Seite 1 von 1

Autor:  end [ So Dez 16, 2012 11:36 ]
Betreff des Beitrags:  Shader-Fehler: EOF

Zitat:
(0) : error C0000: syntax error, unexpected $end at token "<EOF>"


Diesen Fehler habe ich mit diesem Code unter SDL bekommen: (natürlich unter Delphi)

Code:
  1.  
  2.  
  3.     ProgramObject := glCreateProgram;
  4.     sl := TStringList.Create;
  5.  
  6.     //Vertex Shader (ppl)
  7.     VS := glCreateShader(GL_VERTEX_SHADER);
  8.     sl.LoadFromFile('..\data\shadertest\easytl.vs');
  9.     str := sl.Text;
  10.     strlen := Length(sl.Text);
  11.     glShaderSource(ProgramObject,1,PPGLChar(str),@strlen);
  12.     glCompileShader(VS);
  13.     {$IFDEF DEBUG}
  14.       if IsConsole then
  15.       begin
  16.         WriteLn(glGetShaderLog(VS));
  17.         WriteLn(sl.Text);
  18.       end;
  19.     {$ENDIF}
  20.     glAttachShader(ProgramObject,VS);
  21.     glDeleteShader(VS);
  22.     //Fragment Shader (ppl)
  23.     FS := glCreateShader(GL_FRAGMENT_SHADER);
  24.     sl.LoadFromFile('..\data\shadertest\easytl.fs');
  25.     str := sl.Text;
  26.     strlen := Length(sl.Text);
  27.     glShaderSource(ProgramObject,1,PPGLChar(str),@strlen);
  28.     glCompileShader(FS);
  29.     {$IFDEF DEBUG}
  30.       if IsConsole then
  31.       begin
  32.         WriteLn(glGetShaderLog(FS));
  33.         WriteLn(sl.Text);
  34.       end;
  35.     {$ENDIF}
  36.     glAttachShader(ProgramObject,FS);
  37.     glDeleteShader(FS);
  38.  
  39.     glLinkProgram(ProgramObject);
  40.  
  41.  


Sowohl beim VS als auch beim FS.

Die Shader sind einfach und sollten keine Fehler verursachen:

VS:
Code:
  1.  
  2.  
  3. void main(void)
  4. {
  5.   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  6.   gl_FrontColor = gl_Color;
  7. }
  8.  
  9.  


FS:
Code:
  1.  
  2.  
  3. void main(void)
  4. {
  5.  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
  6. }
  7.  
  8.  


Ich kann es mir nicht erklären...

Autor:  Traude [ So Dez 16, 2012 12:36 ]
Betreff des Beitrags:  Re: Shader-Fehler: EOF

Hi,
ich zeige Dir hier den ersten Teil meiner zufriedenstellend arbeitenden Funktion "gsGenShader", das ist zwar FreePascal, aber im Delphi-Modus:

Code:
  1. Function gsGenShader(AProgramType: TProgramType;
  2.                    AText: TStringList;
  3.                    AProgram: LongWord;
  4.                    Var ShaderError: AnsiString): LongWord;
  5.  
  6. Var
  7.    LocalShader: LongWord;
  8.    LocalText: AnsiString;
  9.    TextSize: LongInt;
  10. Begin
  11.    Case AProgramType Of
  12.         prgVertex: LocalShader:= glCreateShader(GL_VERTEX_SHADER);
  13.       prgFragment: LocalShader:= glCreateShader(GL_FRAGMENT_SHADER);
  14.    End;
  15.  
  16.    LocalText:= AText.Text;
  17.    TextSize:= Length(LocalText);
  18.    glShaderSource(LocalShader,1,@LocalText,@TextSize);
  19.  


Zu beachten ist, dass das Shader-Programm ein Ansistring sein muss - und nicht etwa ein WideString. Und das "PPGLChar" kommt mir auch ziemlich verdächtig vor.

Liebe Grüße
Traude

Autor:  end [ So Dez 16, 2012 14:08 ]
Betreff des Beitrags:  Re: Shader-Fehler: EOF

Funktioniert (unter Delphi) auch nicht, den Code hatte ich auch schon probiert, oberes ist beim rumprobieren entstanden ^^.

EDIT:

der Shader zeigt bei meiner Integrierten Grafik keine Fehler, allerdings funktionieren tut er auch nicht :(

Autor:  Traude [ So Dez 16, 2012 17:49 ]
Betreff des Beitrags:  Re: Shader-Fehler: EOF

Meine obige Version funktioniert immer, in OpenGL 2.1 und OpenGL 3.3, sowohl in Ubuntu als auch in Windows7.

Daher liegt der Fehler vielleicht ganz woanders. Bist Du sicher, dass Du einen gültigen Rendering Context hast?

Autor:  Bergmann89 [ So Dez 16, 2012 18:16 ]
Betreff des Beitrags:  Re: Shader-Fehler: EOF

Hey,

wenn kein Context vorhanden ist müsste es eig schon bei glCreateProgram einen Fehler geben. Ich vermute eher, das der Quelltext irgendwie falsch formatiert ist. Mit was hast du den Code geschrieben? Lass dir beim Texteditor mal die nicht druckbaren Zeichen anzeigen und guck mal ob es da irgendwelche Auffälligkeiten gibt. Weiterhin solltest du nachsehen, ob die Datein mit ASCII-Kodierung gespeichert sind.

MfG Bergmann.

Autor:  end [ Mo Dez 17, 2012 07:22 ]
Betreff des Beitrags:  Re: Shader-Fehler: EOF

Ich habe ihn mit dem Notepad geschrieben, an der Formatierung kanns nicht liegen.

Was ich gelesen habe, dass ein Problem mit den NVIDIA-Treibern ist. Die ARB funktioniert bei mir einwandfrei :/

(Graka hat OpenGL 4.3)

Autor:  TAK2004 [ Mo Dez 17, 2012 11:50 ]
Betreff des Beitrags:  Re: Shader-Fehler: EOF

Wenn selbst der einfachste Shader Code Probs macht, dann sollte man mal gucken ob es neue Treiber für die Graka gibt.
Dann würde ich die möglichsten Kandidaten aus schliessen.
Mein größter Kandidat ist die StringList, wo ich vermute, dass er die 2 leeren Zeilen vom Shader garnicht übernimmt und im string auch dann nicht mit rein wandern. Denn ein GLSlang Shader muss immer eine leere Zeile am Ende haben.
Also würde ich mal ein Breakpoint nach str:=sl.Text; setzen und mal rein gucken, was in str steht.

Autor:  end [ Mo Dez 17, 2012 19:27 ]
Betreff des Beitrags:  Re: Shader-Fehler: EOF

nope, fehler:

Code:
  1. glShaderSource(PROGRAMOBJECT,...);


statt


Code:
  1. glShaderSource(SHADEROBJECT,...);


trotzdem natürlich danke an alle Antworten ;)

P.S.

Bzg. des Treibers, dieser Fehler war nur in einer der 1XX-Version vorhanden :/ also schon lange nicht mehr aktuell.

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