/* * sendUniform2i * * parameter name - char* * parameter value0 - GLint * parameter value1 - GLint * return - bool */ bool ShaderObject::sendUniform2i(const char * name, GLint value0, GLint value1) { GLint location = getUniLoc(name); if (location == -1) return false; glUniform2iARB(location, value0, value1); return true; } // end sendUniform2i()
bool Shader::sendUniform2i(char* varname, GLint v0, GLint v1) { GLint loc = GetUniformLocation(varname); if (loc == -1) return false; glUniform2iARB(loc, v0, v1); return true; }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform2iARB(JNIEnv *env, jclass clazz, jint location, jint v0, jint v1, jlong function_pointer) { glUniform2iARBPROC glUniform2iARB = (glUniform2iARBPROC)((intptr_t)function_pointer); glUniform2iARB(location, v0, v1); }
void ProgramUniformGLSL::Set(int nX, int nY) { glUniform2iARB(m_nOpenGLUniformLocation, nX, nY); }
static GLboolean test_uniform_funcs(void) { static const char *signedFragText = "uniform int value1; \n" "uniform ivec2 value2; \n" "uniform ivec3 value3; \n" "uniform ivec4 value4; \n" "void main() \n" "{ \n" " vec4 t = vec4(value4); \n" " t += vec4(value3, 0.0); \n" " t += vec4(value2, 0.0, 0.0); \n" " t += vec4(value1, 0.0, 0.0, 0.0); \n" " gl_FragColor = 0.01 * t; \n" "} \n"; static const char *unsignedFragText = "#extension GL_EXT_gpu_shader4: enable \n" "uniform unsigned int value1; \n" "uniform uvec2 value2; \n" "uniform uvec3 value3; \n" "uniform uvec4 value4; \n" "void main() \n" "{ \n" " vec4 t = vec4(value4); \n" " t += vec4(value3, 0.0); \n" " t += vec4(value2, 0.0, 0.0); \n" " t += vec4(value1, 0.0, 0.0, 0.0); \n" " gl_FragColor = 0.01 * t; \n" "} \n"; GLint vals[4], loc1, loc2, loc3, loc4; GLuint shader; /* * Signed integer tests. */ shader = piglit_compile_shader_text(GL_FRAGMENT_SHADER, signedFragText); assert(shader); Program = piglit_link_simple_program(0, shader); assert(Program); glUseProgram(Program); check_error(__FILE__, __LINE__); loc1 = glGetUniformLocation(Program, "value1"); assert(loc1 >= 0); loc2 = glGetUniformLocation(Program, "value2"); assert(loc2 >= 0); loc3 = glGetUniformLocation(Program, "value3"); assert(loc3 >= 0); loc4 = glGetUniformLocation(Program, "value4"); assert(loc4 >= 0); check_error(__FILE__, __LINE__); gen_values(vals, 1, SIGNED); glUniform1iARB(loc1, vals[0]); if (!check_uniform(vals, 1, SIGNED, loc1, "glUniform1iARB")) return GL_FALSE; gen_values(vals, 2, SIGNED); glUniform2iARB(loc2, vals[0], vals[1]); if (!check_uniform(vals, 2, SIGNED, loc2, "glUniform2iARB")) return GL_FALSE; gen_values(vals, 3, SIGNED); glUniform3iARB(loc3, vals[0], vals[1], vals[2]); if (!check_uniform(vals, 3, SIGNED, loc3, "glUniform3iARB")) return GL_FALSE; gen_values(vals, 4, SIGNED); glUniform4iARB(loc4, vals[0], vals[1], vals[2], vals[3]); if (!check_uniform(vals, 4, SIGNED, loc4, "glUniform4iARB")) return GL_FALSE; /* * Unsigned integer tests. */ shader = piglit_compile_shader_text(GL_FRAGMENT_SHADER, unsignedFragText); assert(shader); Program = piglit_link_simple_program(0, shader); assert(Program); glUseProgram(Program); check_error(__FILE__, __LINE__); loc1 = glGetUniformLocation(Program, "value1"); assert(loc1 >= 0); loc2 = glGetUniformLocation(Program, "value2"); assert(loc2 >= 0); loc3 = glGetUniformLocation(Program, "value3"); assert(loc3 >= 0); loc4 = glGetUniformLocation(Program, "value4"); assert(loc4 >= 0); check_error(__FILE__, __LINE__); gen_values(vals, 1, UNSIGNED); glUniform1uiEXT(loc1, vals[0]); if (!check_uniform(vals, 1, UNSIGNED, loc1, "glUniform1uiEXT")) return GL_FALSE; gen_values(vals, 2, UNSIGNED); glUniform2uiEXT(loc2, vals[0], vals[1]); if (!check_uniform(vals, 2, UNSIGNED, loc2, "glUniform2uiEXT")) return GL_FALSE; gen_values(vals, 3, UNSIGNED); glUniform3uiEXT(loc3, vals[0], vals[1], vals[2]); if (!check_uniform(vals, 3, UNSIGNED, loc3, "glUniform3uiEXT")) return GL_FALSE; gen_values(vals, 4, UNSIGNED); glUniform4uiEXT(loc4, vals[0], vals[1], vals[2], vals[3]); if (!check_uniform(vals, 4, UNSIGNED, loc4, "glUniform4uiEXT")) return GL_FALSE; return GL_TRUE; }
void GLSLShader::SetInt2(GLint variable, int i1, int i2) { if (variable!=-1) glUniform2iARB(variable, i1, i2); }
inline void Uniform<int, 2>::apply() { glUniform2iARB(location, value[0], value[1]); }
ShaderProgram &u(const char *var, GLint x, GLint y) { glUniform2iARB(uniform(var), x, y); return *this; }
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"); } }