GLint OpenGL::getShaderInteger( ShaderProgramType shaderProgramType, std::string varName ) { LOCK GLint varLocation = -1; GLint varValue = 0; varLocation = getShaderVariableLocation( varName, shaderProgramsIDs_.at( shaderProgramType ) ); glGetUniformiv( shaderProgramsIDs_.at( shaderProgramType ), varLocation, &varValue ); return varValue; }
void fixup_glGetActiveAttribOrUniform(GLTraceContext *context, GLMessage *glmsg, void *pointersToFixup[]) { /* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); */ /* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) */ fixup_GenericIntArray(3, 1, glmsg, pointersToFixup[0]); // length fixup_GenericIntArray(4, 1, glmsg, pointersToFixup[1]); // size fixup_GenericEnumArray(5, 1, glmsg, pointersToFixup[2]); // type fixup_CStringPtr(6, glmsg, pointersToFixup[3]); // name // The index argument in the glGetActive[Attrib|Uniform] functions // does not correspond to the actual location index as used in // glUniform*() or glVertexAttrib*() to actually upload the data. // In order to make things simpler for the debugger, we also pass // a hidden location argument that stores the actual location. // append the location value to the end of the argument list GLint location = getShaderVariableLocation(context, glmsg, (GLchar*)pointersToFixup[3]); GLMessage_DataType *arg_location = glmsg->add_args(); arg_location->set_isarray(false); arg_location->set_type(GLMessage::DataType::INT); arg_location->add_intvalue(location); }