void glsl_program :: renderARB() { if (m_linked) { glUseProgramObjectARB( m_programARB ); for(int i=0; i<m_uniformCount; i++) { if(m_flag[i]) { switch (m_type[i]) { /* float vectors */ case GL_FLOAT: glUniform1fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]) ); break; case GL_FLOAT_VEC2_ARB: glUniform2fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]) ); break; case GL_FLOAT_VEC3_ARB: glUniform3fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]), static_cast<GLfloat>(m_param[i][2]) ); break; case GL_FLOAT_VEC4_ARB: glUniform4fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]), static_cast<GLfloat>(m_param[i][2]), static_cast<GLfloat>(m_param[i][3]) ); break; /* int vectors */ case GL_INT: glUniform1iARB( m_loc[i], static_cast<GLint>(m_param[i][0]) ); break; case GL_INT_VEC2_ARB: glUniform2iARB( m_loc[i], static_cast<GLint>(m_param[i][0]), static_cast<GLint>(m_param[i][1]) ); break; case GL_INT_VEC3_ARB: glUniform3iARB( m_loc[i], static_cast<GLint>(m_param[i][0]), static_cast<GLint>(m_param[i][1]), static_cast<GLint>(m_param[i][2]) ); break; case GL_INT_VEC4_ARB: glUniform4iARB( m_loc[i], static_cast<GLint>(m_param[i][0]), static_cast<GLint>(m_param[i][1]), static_cast<GLint>(m_param[i][2]), static_cast<GLint>(m_param[i][3]) ); break; /* bool vectors */ case GL_BOOL_ARB: glUniform1fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]) ); break; case GL_BOOL_VEC2_ARB: glUniform2fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]) ); break; case GL_BOOL_VEC3_ARB: glUniform3fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]), static_cast<GLfloat>(m_param[i][2]) ); break; case GL_BOOL_VEC4_ARB: glUniform4fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]), static_cast<GLfloat>(m_param[i][2]), static_cast<GLfloat>(m_param[i][3]) ); break; /* float matrices */ case GL_FLOAT_MAT2_ARB: // GL_TRUE = row major order, GL_FALSE = column major glUniformMatrix2fvARB( m_loc[i], 1, GL_FALSE, m_param[i] ); break; case GL_FLOAT_MAT3_ARB: glUniformMatrix3fvARB( m_loc[i], 1, GL_FALSE, m_param[i] ); break; case GL_FLOAT_MAT4_ARB: glUniformMatrix4fvARB( m_loc[i], 1, GL_FALSE, m_param[i] ); break; /* textures */ case GL_SAMPLER_1D_ARB: break; case GL_SAMPLER_2D_ARB: glUniform1iARB(m_loc[i], m_param[i][0]); break; case GL_SAMPLER_3D_ARB: break; case GL_SAMPLER_CUBE_ARB: break; case GL_SAMPLER_1D_SHADOW_ARB: break; case GL_SAMPLER_2D_SHADOW_ARB: break; case GL_SAMPLER_2D_RECT_ARB: glUniform1iARB(m_loc[i], m_param[i][0]); break; default: ; } // remove flag because the value is in GL's state now... m_flag[i]=0; } } // glUniform1iARB(glGetUniformLocationARB(program_object, "MyTex1"), 1); } else { /* JMZ: this is really annoying... */ //error("no program linked"); } }
void shade::GLSLARBWrapper::Uniform4f(Handle index, float x, float y, float z, float w) { glUniform4fARB(index, x, y, z, w); }
void KShaderProgram::setParam4(Kite::I16 Location, F32 Value1, F32 Value2, F32 Value3, F32 Value4) const{ if (_kprogId && Location >= 0){ DGL_CALL(glUniform4fARB(Location, Value1, Value2, Value3, Value4)); } }
void Shader::setVector4Uniform(const std::string& _name, float _v1, float _v2, float _v3, float _v4) const { assert(programObj_ != 0); glUniform4fARB(getUniformLocation(_name.c_str()), _v1, _v2, _v3, _v4); }