DGL
https://delphigl.com/forum/

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

Autor:  MBS [ Mi Okt 24, 2012 11:07 ]
Betreff des Beitrags:  Shader Fehler

Hallo Leute,
ich verstehe es nicht^^ Irgendwie mag mein Programm Shader nicht. Ich versuche den einfachsten alles Shadercodes zu kompilieren:
Code:
  1.  
  2. //Vertexshader
  3. void main(void)
  4. {
  5.     gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  6.     gl_FrontColor = gl_Color;
  7. }
  8.  

Code:
  1.  
  2. //Fragmentshader
  3. void main(void)
  4. {
  5.     gl_FragColor = gl_Color;
  6. }
  7.  


Und dazu benutzte ich folgenden Quellcode:
Code:
  1.  
  2. var VertexShaderList,FragmentShaderList: TStringList;
  3.     VertexShaderText,FragmentShaderText:String;
  4.     VertexShaderLength,FragmentShaderLength: Integer;
  5. begin
  6.   //Shader laden
  7.   //Shaderscripte laden
  8.   VertexShaderList:=TStringList.Create;
  9.   FragmentShaderList:=TStringList.Create;
  10.   VertexShaderList.LoadFromFile('Shader\Testshader\test.vert');
  11.   FragmentShaderList.LoadFromFile('Shader\Testshader\test.frag');
  12.   VertexShaderText:=VertexShaderList.Text;
  13.   FragmentShaderText:=FragmentShaderList.Text;
  14.   VertexShaderLength:=Length(VertexShaderText);
  15.   FragmentShaderLength:=Length(FragmentshaderText);
  16.   //Shaderscripte freigeben
  17.   VertexShaderList.Free;
  18.   FragmentShaderList.Free;
  19.  
  20.   //Shader erstellen
  21.   ProgramObject:=glCreateProgramObjectARB;
  22.   VertexShaderObject:=glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
  23.   FragmentShaderObject:=glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
  24.   glShaderSourceARB(VertexShaderObject,1,@VertexShaderText,@VertexShaderLength); //Shader zuweisen
  25.   glShaderSourceARB(FragmentShaderObject,1,@FragmentShaderText,@FragmentShaderLength);
  26.  
  27.  
  28.   //Shader Compilieren
  29.   glCompileShaderARB(VertexShaderObject);
  30.   MessageDlg('VertexShader: '+glSlang_GetInfoLog(VertexShaderObject),mtError,[mbOK],0);
  31.   glCompileShaderARB(FragmentShaderObject);
  32.   MessageDlg('FragmentShader: '+glSlang_GetInfoLog(FragmentShaderObject),mtError,[mbOK],0);
  33.  
  34.   //Shader mit Shaderprogramm binden
  35.   glAttachObjectARB(ProgramObject,VertexShaderObject);
  36.   glAttachObjectARB(ProgramObject,FragmentShaderObject);
  37.  
  38.   //Shader Ressourcen freigeben
  39.   glDeleteObjectARB(VertexShaderObject);
  40.   glDeleteObjectARB(FragmentShaderObject);
  41.  
  42.   //Shaderprogramm zum ausführbaren Programm gelinkt
  43.   glLinkProgramARB(ProgramObject);
  44.  
  45.   glUseProgramObjectARB(ProgramObject); //Shader benutzten
  46.  
  47.  


Und ich bekomme immer folgenden Fehler:
Fragmentshader: (0): error C0000: syntax error, unexspected $end, expecting "::" at token <EOF>"
Vertexshader: (0): error C0000: syntax error, unexspected $end, expecting "::" at token <EOF>"

Ich benutzte eine NVIDA Geforce GTX 560 TI

Autor:  Lord Horazont [ Mi Okt 24, 2012 11:34 ]
Betreff des Beitrags:  Re: Shader Fehler

Neueres Delphi? Wenn ja ist String nen WideString und du willst statt dessen einen AnsiString verwenden. Eventuell ist auch die übergabe der Strings an die glShaderSource-Funktionen falsch, wenn der obere Tipp nicht hilft bzw. du ein älteres Delphi verwendest, versuch mal ein @foo[1] anstatt @foo (nur für die strings, nicht für die längen).

grüße

Autor:  MBS [ Mi Okt 24, 2012 11:47 ]
Betreff des Beitrags:  Re: Shader Fehler

Ich benutzte Delphi 2009 Professional.

Autor:  MBS [ Mi Okt 24, 2012 11:57 ]
Betreff des Beitrags:  Re: Shader Fehler

Ich habe den String durch einen Widestring ausgetauscht. Hat leider nicht geklappt.
Es wird auch ein PPGLcharARB verlangt. Das müsste nämlich sogar ANSI sein denn:

PPGLcharARB = ^PGLcharARB;
PGLcharARB = PAnsiChar;

Aber danke für die Hilfe :D

Autor:  MBS [ Mi Okt 24, 2012 11:59 ]
Betreff des Beitrags:  Re: Shader Fehler

Ich habe String durch ANSIString getauscht.
Jetzt kommt kein Fehler ;)

Danke für die Hilfe, ich wäre nämlich nicht auf so einen Fehler gekommen ;)

Autor:  Lord Horazont [ Mi Okt 24, 2012 17:50 ]
Betreff des Beitrags:  Re: Shader Fehler

Sag ich doch ;). Du sollst String durch AnsiString ersetzen, weil die neueren Delphi-Versionen standardmäßig nen WideString verwenden.

grüße ;)

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