/* ================================================================================================ idRenderProgManager::LoadVertexShader ================================================================================================ */ void idRenderProgManager::LoadVertexShader( int index ) { if( vertexShaders[index].progId != INVALID_PROGID ) { return; // Already loaded } vertexShader_t& vs = vertexShaders[index]; vertexShaders[index].progId = ( GLuint ) LoadGLSLShader( GL_VERTEX_SHADER, vs.name, vs.nameOutSuffix, vs.shaderFeatures, vs.builtin, vs.uniforms ); }
/* ================================================================================================ idRenderProgManager::LoadFragmentShader ================================================================================================ */ void idRenderProgManager::LoadFragmentShader( int index ) { if( fragmentShaders[index].progId != INVALID_PROGID ) { return; // Already loaded } fragmentShader_t& fs = fragmentShaders[index]; fragmentShaders[index].progId = ( GLuint ) LoadGLSLShader( GL_FRAGMENT_SHADER, fs.name, fs.nameOutSuffix, fs.shaderFeatures, fs.builtin, fs.uniforms ); }
// // LoadShaders // bool LoadShaders() { puts("Load shaders"); GLuint vsh, fsh; bool bLinked; // // Transform'n'Color program // vsh = LoadGLSLShader(GL_VERTEX_SHADER, g_pVshTransform); fsh = LoadGLSLShader(GL_FRAGMENT_SHADER, g_pFshFill); if ((0 == vsh) || (0 == fsh)) return false; g_WvpAndColorProgram = glCreateProgram(); glAttachShader(g_WvpAndColorProgram, vsh); glAttachShader(g_WvpAndColorProgram, fsh); glBindAttribLocation(g_WvpAndColorProgram, 0, "position"); bLinked = LinkGLSLProgram(g_WvpAndColorProgram); glDeleteShader(fsh); glDeleteShader(vsh); if (!bLinked) { glDeleteProgram(g_WvpAndColorProgram); return false; } g_WvpAndColorUniforms.Mwvp = GetUniformLocation(g_WvpAndColorProgram, "Mwvp"); g_WvpAndColorUniforms.FillColor = GetUniformLocation(g_WvpAndColorProgram, "color"); // // Phong lighting program // vsh = LoadGLSLShader(GL_VERTEX_SHADER, g_pVshPhong); fsh = LoadGLSLShaderFromFile(GL_FRAGMENT_SHADER, "phong.psh"); if ((0 == vsh) || (0 == fsh)) return false; g_PhongProgram = glCreateProgram(); glAttachShader(g_PhongProgram, vsh); glAttachShader(g_PhongProgram, fsh); glBindAttribLocation(g_PhongProgram, 0, "position"); glBindAttribLocation(g_PhongProgram, 1, "normal"); bLinked = LinkGLSLProgram(g_PhongProgram); glDeleteShader(fsh); glDeleteShader(vsh); if (!bLinked) { glDeleteProgram(g_PhongProgram); return false; } g_PhongUniforms.Mpivot = GetUniformLocation(g_PhongProgram, "Mpivot"); g_PhongUniforms.Mworld = GetUniformLocation(g_PhongProgram, "Mworld"); g_PhongUniforms.Mwvp = GetUniformLocation(g_PhongProgram, "Mwvp"); for (int i = 0; i < MAX_POINT_LIGHTS; ++i) { char name[256]; sprintf(name, "light_and_radius[%d]", i); g_PhongUniforms.Light[i] = GetUniformLocation(g_PhongProgram, name); sprintf(name, "Kd[%d]", i); g_PhongUniforms.Kd[i] = GetUniformLocation(g_PhongProgram, name); sprintf(name, "Ks[%d]", i); g_PhongUniforms.Ks[i] = GetUniformLocation(g_PhongProgram, name); } g_PhongUniforms.Count = GetUniformLocation(g_PhongProgram, "count"); g_PhongUniforms.ViewPos = GetUniformLocation(g_PhongProgram, "view"); return true; }