- // =============================================================================
- // TGLForm.RenderPath_ARBShader
- // =============================================================================
- // Render path for ARB_Vertex_Program and ARB_Vertex_Shader. Needs PS2.0
- // support, but is most likely faster then the glSlang render path.
- // =============================================================================
- procedure TGLForm.RenderPath_ARBShader;
- begin
- glBindProgramARB(GL_VERTEX_PROGRAM_ARB, BumpVPARB);
- glEnable(GL_VERTEX_PROGRAM_ARB);
- glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, 0, LightPos.x,LightPos.y,LightPos.z,0);
- glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, 1, 0,10,10,0);
- glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, BumpFPARB);
- glEnable(GL_FRAGMENT_PROGRAM_ARB);
- glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 0, 1/50,1/50,1/50,1/50); // invRadius
- glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 1, 0,0,0,0); // ambient
- // Bind base map to texture unit 0
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, DecalTex);
- glEnable(GL_TEXTURE_2D);
- // Bind normal map to texture unit 1
- glActiveTexture(GL_TEXTURE1);
- glBindTexture(GL_TEXTURE_2D, NormalMap);
- glEnable(GL_TEXTURE_2D);
- // Bind specular map to texture unit 2
- glActiveTexture(GL_TEXTURE2);
- glBindTexture(GL_TEXTURE_2D, SpecularMap);
- glEnable(GL_TEXTURE_2D);
- glClientActiveTexture(GL_TEXTURE0);
- glActiveTexture(GL_TEXTURE0);
- Primitive[PrimType].Render;
- // Disable textures
- glActiveTextureARB(GL_TEXTURE0_ARB);
- glDisable(GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE1_ARB);
- glDisable(GL_TEXTURE_2D);
- glActiveTextureARB(GL_TEXTURE2_ARB);
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_VERTEX_PROGRAM_ARB);
- glDisable(GL_FRAGMENT_PROGRAM_ARB);
- end;