Hi!
Das ist mein 1. Shader-Versuch:
Laden:
Code: procedure TGLForm.FormCreate(Sender: TObject); var vst: TStringList; VertexText: String; VertexL: Integer; fst: TStringList; FragmentText: String; FragmentL: Integer; begin vst:= TStringList.Create; vst.LoadFromFile('vertex.txt'); VertexText:= vst.Text; VertexL:= Length(VertexText); fst:= TStringList.Create; fst.LoadFromFile('fragment.txt'); FragmentText:= fst.Text; FragmentL:= Length(FragmentText); InitOpenGL; dc:= GetDC(Handle); rc:= CreateRenderingContext(dc, [opDoubleBuffered], 32, 24, 8, 0, 0, 0); ActivateRenderingContext(dc,rc); // Shader po:= glCreateProgramObjectARB; vs:= glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); fs:= glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); glShaderSourceARB(vs, 1, @VertexText, @VertexL); glShaderSourceARB(fs, 1, @FragmentText, @FragmentL); glCompileShaderARB(vs); ShowMessage(GetInfoLog(vs)); glCompileShaderARB(fs); ShowMessage(GetInfoLog(fs)); glAttachObjectARB(po, vs); glAttachObjectARB(po, fs); glDeleteObjectARB(vs); glDeleteObjectARB(fs); glLinkProgramARB(po); end;
Rendern:
Code: procedure TGLForm.Render; begin if rc = 0 then exit; // Viewport glViewport(0, 0, ClientWidth, ClientHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(90, 1, 1, 100); // Modelview-Matrix glMatrixMode(GL_MODELVIEW); glLoadIdentity; // Rendern beginnen glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT); // Rendern mit Shader glUseProgramObjectARB(po); glBegin(GL_QUADS); glColor4f(1, 0, 0, 1); glVertex3f(-1, 1, -2); glColor4f(0, 1, 0, 1); glVertex3f(-1, -1, -2); glColor4f(0, 0, 1, 1); glVertex3f(1, -1, -2); glColor4f(1, 1, 1, 1); glVertex3f(1, 1, -2); glEnd; glUseProgramObjectARB(0); // Backbuffer flippen SwapBuffers(dc); end;
Vertex Shader:
Code: vec4 col = vec4(1.0, 1.0, 1.0, 1.0); void main(void) { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_FrontColor = col; }
Fragment Shader:
Code: void main(void) { gl_FragColor = gl_FrontColor; }
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.
|