/* ================================================================================================ idRenderProgManager::CommitUnforms ================================================================================================ */ void idRenderProgManager::CommitUniforms() { const int progID = GetGLSLCurrentProgram(); const glslProgram_t & prog = glslPrograms[progID]; if ( r_useUniformArrays.GetBool() ) { ALIGNTYPE16 idVec4 localVectors[RENDERPARM_USER + MAX_GLSL_USER_PARMS]; if ( prog.vertexShaderIndex >= 0 ) { const idList<int> & vertexUniforms = vertexShaders[prog.vertexShaderIndex].uniforms; if ( prog.vertexUniformArray != -1 && vertexUniforms.Num() > 0 ) { for ( int i = 0; i < vertexUniforms.Num(); i++ ) { localVectors[i] = glslUniforms[vertexUniforms[i]]; } qglUniform4fv( prog.vertexUniformArray, vertexUniforms.Num(), localVectors->ToFloatPtr() ); } } if ( prog.fragmentShaderIndex >= 0 ) { const idList<int> & fragmentUniforms = fragmentShaders[prog.fragmentShaderIndex].uniforms; if ( prog.fragmentUniformArray != -1 && fragmentUniforms.Num() > 0 ) { for ( int i = 0; i < fragmentUniforms.Num(); i++ ) { localVectors[i] = glslUniforms[fragmentUniforms[i]]; } qglUniform4fv( prog.fragmentUniformArray, fragmentUniforms.Num(), localVectors->ToFloatPtr() ); } } } else { for ( int i = 0; i < prog.uniformLocations.Num(); i++ ) { const glslUniformLocation_t & uniformLocation = prog.uniformLocations[i]; qglUniform4fv( uniformLocation.uniformIndex, 1, glslUniforms[uniformLocation.parmIndex].ToFloatPtr() ); } } }
void R_ProgramParameter4fvs (const char* name, GLint size, GLfloat* value) { r_progvar_t* v; if (!(v = R_ProgramVariable(GL_UNIFORM, name))) return; qglUniform4fv(v->location, size, value); }