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

Aktuelle Zeit: Do Jul 31, 2025 17:09

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader funktioniert nicht
BeitragVerfasst: Fr Apr 29, 2005 18:48 
Offline
DGL Member

Registriert: Do Mai 13, 2004 16:36
Beiträge: 116
Wohnort: Deutsch-Wagram (Österreich)
Hi!
Das ist mein 1. Shader-Versuch:

Laden:
Code:
  1. procedure TGLForm.FormCreate(Sender: TObject);
  2. var
  3.   vst: TStringList;
  4.   VertexText: String;
  5.   VertexL: Integer;
  6.   fst: TStringList;
  7.   FragmentText: String;
  8.   FragmentL: Integer;
  9. begin
  10.   vst:= TStringList.Create;
  11.   vst.LoadFromFile('vertex.txt');
  12.   VertexText:= vst.Text;
  13.   VertexL:= Length(VertexText);
  14.  
  15.   fst:= TStringList.Create;
  16.   fst.LoadFromFile('fragment.txt');
  17.   FragmentText:= fst.Text;
  18.   FragmentL:= Length(FragmentText);
  19.  
  20.   InitOpenGL;
  21.   dc:= GetDC(Handle);
  22.   rc:= CreateRenderingContext(dc, [opDoubleBuffered], 32, 24, 8, 0, 0, 0);
  23.   ActivateRenderingContext(dc,rc);
  24.  
  25.   // Shader
  26.   po:= glCreateProgramObjectARB;
  27.   vs:= glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
  28.   fs:= glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
  29.  
  30.   glShaderSourceARB(vs, 1, @VertexText, @VertexL);
  31.   glShaderSourceARB(fs, 1, @FragmentText, @FragmentL);
  32.  
  33.   glCompileShaderARB(vs);
  34.   ShowMessage(GetInfoLog(vs));
  35.  
  36.   glCompileShaderARB(fs);
  37.   ShowMessage(GetInfoLog(fs));
  38.  
  39.   glAttachObjectARB(po, vs);
  40.   glAttachObjectARB(po, fs);
  41.  
  42.   glDeleteObjectARB(vs);
  43.   glDeleteObjectARB(fs);
  44.  
  45.   glLinkProgramARB(po);
  46. end;


Rendern:
Code:
  1. procedure TGLForm.Render;
  2. begin
  3.   if rc = 0 then
  4.     exit;
  5.  
  6.   // Viewport
  7.   glViewport(0, 0, ClientWidth, ClientHeight);
  8.   glMatrixMode(GL_PROJECTION);
  9.   glLoadIdentity;
  10.   gluPerspective(90, 1, 1, 100);
  11.  
  12.   // Modelview-Matrix
  13.   glMatrixMode(GL_MODELVIEW);
  14.   glLoadIdentity;
  15.  
  16.   // Rendern beginnen
  17.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT);
  18.  
  19.   // Rendern mit Shader
  20.   glUseProgramObjectARB(po);
  21.  
  22.   glBegin(GL_QUADS);
  23.     glColor4f(1, 0, 0, 1);
  24.     glVertex3f(-1, 1, -2);
  25.     glColor4f(0, 1, 0, 1);
  26.     glVertex3f(-1, -1, -2);
  27.     glColor4f(0, 0, 1, 1);
  28.     glVertex3f(1, -1, -2);
  29.     glColor4f(1, 1, 1, 1);
  30.     glVertex3f(1, 1, -2);
  31.   glEnd;
  32.  
  33.   glUseProgramObjectARB(0);
  34.  
  35.   // Backbuffer flippen
  36.   SwapBuffers(dc);
  37. end;


Vertex Shader:
Code:
  1. vec4 col = vec4(1.0, 1.0, 1.0, 1.0);
  2.  
  3. void main(void)
  4. {
  5.   gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  6.   gl_FrontColor = col;
  7. }


Fragment Shader:
Code:
  1. void main(void)
  2. {
  3.   gl_FragColor = gl_FrontColor;
  4. }
Aber das gerenderte Bild schaut genauso aus wie ohne Shader.

[EDIT]Ich bin dem Fehler nähergekommen. Wenn ich GetInfoLog (aus dem Tutorial) für das Programmobjekt aufrufe, erhalte ich das:
Zitat:
Fragment info
------------
error: unknown fragment shader builtin varying parameter (named gl_FrontColor) encountered
Was bedeutet das? Ich verstehe diese Meldung nicht.

_________________
Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 29, 2005 21:03 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Im Fragment shader muss statt gl_FrontColor gl_Color benutzt werden, dann funktioniert der shader auch.

Zitat:
Die Varyings gl_FrontColor, gl_FrontSecondaryColor, gl_BackColor und gl_BackSecondaryColor können im FragmentShader nur unter den Aliases gl_Color bzw. gl_SecondaryColor gelesen werden. Welcher Wert des Vertex Shaders im Fragment Shader dort eingesetzt wird ist abhängig davon ob das Fragment zu einer nach vorne oder nach hinten zeigenden Primitive gehört.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 30, 2005 11:56 
Offline
DGL Member

Registriert: Do Mai 13, 2004 16:36
Beiträge: 116
Wohnort: Deutsch-Wagram (Österreich)
Thx, jetzt funktioniert er.

_________________
Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.028s | 17 Queries | GZIP : On ]