- //Fullscreenquad
- procedure DrawShader(const alpha: Single = 1.0);
- var
- buildList: Boolean;
- d: single;
- begin
- glColor4f(1, 1, 1, alpha);
- if fqDisplayList <> 0 then
- begin
- glcalllist(fqDisplayList);
- exit;
- end
- else
- begin
- //buld lists;
- fqDisplayList := glGenLists(1);
- glNewList(fqDisplayList, GL_COMPILE);
- BuildList:=true;
- end;
- D:= frmDebug.JvSpinEdit2.Value;;
- glMatrixMode(GL_PROJECTION);
- glPushMatrix;
- glLoadIdentity;
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- glbegin(GL_TRIANGLE_STRIP);
- glMultiTexCoord2f(GL_TEXTURE0 , 0, 1);
- glVertex3f(-1.0, 1.0, 1);
- glMultiTexCoord2f(GL_TEXTURE0, 0, 0);
- glVertex3f(-1.0, -1.0, 1);
- glMultiTexCoord2f(GL_TEXTURE0, 1, 1);
- glVertex3f(1.0, 1.0, 1);
- glMultiTexCoord2f(GL_TEXTURE0,1, 0);
- glVertex3f(1.0, -1.0, 1);
- glEnd;
- glMatrixMode(GL_PROJECTION);
- glPopMatrix;
- glMatrixMode(GL_MODELVIEW);
- if buildList then
- begin
- glEndList;
- glCallList(fqDisplayList);
- end;
- end;
- ...
- glUseProgram(shader.ProgramObject);
- glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject, 'InvViewMat'), 1, false, @InverseCamMatrix);
- glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject, 'proM'), 1, false, @projectionMatrixInverse);
- glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject, 'ModelMat'), 1, false, @Cam_Matrix);
- glActiveTexture(GL_TEXTURE0);
- glEnable(GL_TEXTURE_2D);
- glBindtexture(GL_TEXTURE_2D, dfs_fbo.Images[0]);
- glUniform1i(glGetUniformLocation(shader.ProgramObject, 'colorMap'), 0);
- glActiveTexture(GL_TEXTURE1);
- light.LightTexture.Bind();
- glUniform1i(glGetUniformLocation(shader.ProgramObject, 'lightMap'), 1);
- glActiveTexture(GL_TEXTURE2);
- glBindtexture(GL_TEXTURE_2D, light.shadowmap);
- glUniform1i(glGetUniformLocation(shader.ProgramObject, 'shadowMap'), 2);
- glActiveTexture(GL_TEXTURE3);
- glBindTexture(GL_TEXTURE_2D, dfs_fbo.Images[1]);
- glUniform1i(glGetUniformLocation(shader.ProgramObject, 'normalMap'), 3);
- glActiveTexture(GL_TEXTURE4);
- glBindtexture(GL_TEXTURE_2D, dfs_Depth_tex);
- glUniform1i(glGetUniformLocation(shader.ProgramObject, 'depthMap'), 4);
- // Matrix übergeben
- glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject,
- 'TexGenMat'), 1, false, @texMatrix);
- glUniform3fv(glGetUniformLocation(shader.ProgramObject, 'lightPos'),
- 1, @light.lightPos[0]);
- glUniform1f(glGetUniformLocation(shader.ProgramObject,
- 'GlobalLightFactor'), x13d.Stage.globalLightFactor);
- glUniform4fv(glGetUniformLocation(shader.ProgramObject, 'lampColor'),
- 1, @lampColor[0]);
- glActiveTexture(GL_TEXTURE0);
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix;
- DrawShader;
- glPopMatrix;
- //RenderAllMassiveObjects(true, CamFrustum, false);
- glUseProgram(0);