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

Aktuelle Zeit: Fr Jun 07, 2024 14:29

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader lassen sich nicht compilieren
BeitragVerfasst: So Apr 24, 2011 06:08 
Offline
DGL Member

Registriert: Do Jun 22, 2006 19:13
Beiträge: 52
Wohnort: Lübeck
Hallo zusammen und frohe Ostern!

Habe ein kleines Demo-Projektchen aufgesetzt um mit Shaderen warm zu werden.
Ich render in der Scene ein Quad mit einer Textur drauf.

Den Shadercode den ich testen möchte, habe ich von hier:
http://www.blitzbasic.com/Community/posts.php?topic=85263

Hier der Code um den Shader zu initialisieren:
Code:
  1.  
  2. procedure TForm2.Button5Click(Sender: TObject);
  3. var
  4.   FragmentShaderObject : GLhandle;
  5.   ShaderText: String;
  6.   ShaderLength: Integer;
  7.   Shader: TStringList;
  8. const
  9.   tc_offsetArr: array[0..8] of Single = (1.0,2.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0);
  10. begin
  11.   showmessage(gluErrorString(glGetError));
  12.  
  13.   Shader := TStringList.Create;
  14.   try
  15.     Shader.LoadFromFile('Shader_Blur_frag.txt');
  16.     ShaderText := Shader.Text;
  17.     ShaderLength := Length(ShaderText);
  18.  
  19.     FragmentShaderObject := glCreateShader(GL_FRAGMENT_SHADER);
  20.     glShaderSource(FragmentShaderObject, 1, @ShaderText, @ShaderLength);
  21.     glCompileShader(FragmentShaderObject);
  22.     ShowMessage(GetInfoLog(FragmentShaderObject));
  23.  
  24.     ProgramObject := glCreateProgram;
  25.  
  26.     glAttachShader(ProgramObject, FragmentShaderObject);
  27.  
  28.     glDeleteShader(FragmentShaderObject);
  29.  
  30.     glLinkProgram(ProgramObject);
  31.  
  32.     glUniform1i(glGetUniformLocation(ProgramObject, PGLCharARB('sampler0')), 1);
  33.     glUniform2fvARB(glGetUniformLocation(ProgramObject, PGLCharARB('tc_offset')), 9,
  34.       @tc_offsetArr);
  35.   finally
  36.     Shader.Free;
  37.   end;
  38. end;
  39.  


Hier der Code des Fragmentshaders:
Code:
  1.  
  2. // blur (low-pass) 3x3 kernel
  3.  
  4. uniform sampler2D sampler0;
  5. uniform vec2 tc_offset[9];
  6.  
  7. void main(void)
  8. {
  9.     vec4 sample[9];
  10.  
  11.     for (int i = 0; i < 9; i++)
  12.     {
  13.         sample[i] = texture2D(sampler0,
  14.                               gl_TexCoord[0].st + tc_offset[i]);
  15.     }
  16.  
  17. //   1 2 1
  18. //   2 1 2   / 13
  19. //   1 2 1
  20.  
  21.     gl_FragColor = (sample[0] + (2.0*sample[1]) + sample[2] +
  22.                     (2.0*sample[3]) + sample[4] + (2.0*sample[5]) +
  23.                     sample[6] + (2.0*sample[7]) + sample[8]) / 13.0;
  24.  
  25. }
  26.  


Von der Fehlermeldung habe ich einen Screenshot gemacht.

Erst hatte ich in meiner Verzeiflung angenommen, das hier kein Kommentar im Code gewünscht ist.
Somit habe ich die Zeile "// blur (low-pass) 3x3 kernel" entfernt.
Nun habe ich selbige Fehlermeldung nur mit "u" bekommen anstatt mit "/".

Hat jemand eine Ahnung was ich falsch mache?

Ich bin auch die "Checkliste" im Wiki durchgegangen!


Dateianhänge:
Dateikommentar: Fehlermeldung
GLSL_Error.jpg
GLSL_Error.jpg [ 14.1 KiB | 4202-mal betrachtet ]
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Apr 24, 2011 09:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Vermutlich ein WideString-Problem. OpenGL erwartet den Shader als utf8, also mit 8bit pro Zeichen. Ich glaube Delphi verwendet bei normalen Strings 16bit pro Zeichen. Also anderen String-Typ benutzen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Apr 24, 2011 12:19 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Probier mal AnsiString, der kann auch mehr als 256 Zeichen.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Apr 24, 2011 12:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
AnsiString.
@Ireyon: String kann das auch (bei FreePascal aber nur mit {$H+}).

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Apr 24, 2011 17:12 
Offline
DGL Member

Registriert: Do Jun 22, 2006 19:13
Beiträge: 52
Wohnort: Lübeck
Dankeschön,

der Tip war absolut richtig!

habs nun so gelöst:

Code:
  1.  
  2. ...
  3.     Shader.LoadFromFile('Shader_Blur_frag.txt');
  4.     ShaderText := UTF8Encode(Shader.Text);
  5.     ShaderLength := Length(ShaderText);
  6.  
  7.     FragmentShaderObject := glCreateShader(GL_FRAGMENT_SHADER);
  8.     glShaderSource(FragmentShaderObject, 1, @ShaderText, @ShaderLength);
  9.     glCompileShader(FragmentShaderObject);
  10.     ShowMessage(GetInfoLog(FragmentShaderObject));
  11. ...
  12.  


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.023s | 19 Queries | GZIP : On ]