void GL2DShader::GetShaderLocations() { uint* pCurrProgram = &ProgramID[0]; do { // Attribute locations GetAttribLocation(Vertex, *pCurrProgram, "Position"); GLERROR(); GetAttribLocation(TexCoords, *pCurrProgram, "TexCoord"); GLERROR(); // Uniform locations GetUniformLocation(InTextures, *pCurrProgram, "InTextures"); GLERROR(); GetUniformLocation(OutTextures, *pCurrProgram, "OutTextures"); GLERROR(); GetUniformLocation(Texture[0], *pCurrProgram, "Texture0"); GLERROR(); GetUniformLocation(Texture[1], *pCurrProgram, "Texture1"); GLERROR(); GetUniformLocation(Texture[2], *pCurrProgram, "Texture2"); GLERROR(); GetUniformLocation(Texture[3], *pCurrProgram, "Texture3"); GLERROR(); GetUniformLocation(Texture[4], *pCurrProgram, "Texture4"); GLERROR(); GetUniformLocation(Texture[5], *pCurrProgram, "Texture5"); GLERROR(); GetUniformLocation(Texture[6], *pCurrProgram, "Texture6"); GLERROR(); GetUniformLocation(Texture[7], *pCurrProgram, "Texture7"); GLERROR(); // Output locations glBindFragDataLocation(*pCurrProgram, 0, "Color0"); GLERROR(); glBindFragDataLocation(*pCurrProgram, 1, "Color1"); GLERROR(); glBindFragDataLocation(*pCurrProgram, 2, "Color2"); GLERROR(); glBindFragDataLocation(*pCurrProgram, 3, "Color3"); GLERROR(); glBindFragDataLocation(*pCurrProgram, 4, "Color4"); GLERROR(); glBindFragDataLocation(*pCurrProgram, 5, "Color5"); GLERROR(); glBindFragDataLocation(*pCurrProgram, 6, "Color6"); GLERROR(); glBindFragDataLocation(*pCurrProgram, 7, "Color7"); GLERROR(); glLinkProgram(*pCurrProgram); } while(*++pCurrProgram != 0); }
void GLMainShader::GetShaderLocations() { uint* pCurrProgram = &ProgramID[0]; do { // Attribute locations GetAttribLocation(Vertex, *pCurrProgram, "Position"); GetAttribLocation(TexCoords, *pCurrProgram, "TexCoord"); GetAttribLocation(Normal, *pCurrProgram, "Normal"); GetAttribLocation(Colors, *pCurrProgram, "Colors"); GetAttribLocation(Tangent, *pCurrProgram, "Tangent"); GetAttribLocation(Bitangent, *pCurrProgram, "Bitangent"); GetAttribLocation(VertexJoint, *pCurrProgram, "Joints"); GetAttribLocation(VertexWeight, *pCurrProgram, "Weights"); GetAttribLocation(Light, *pCurrProgram, "Light"); // Get a handle to the the matrix uniforms GetUniformLocation(MatMVP, *pCurrProgram, "MVP"); GetUniformLocation(MatMV, *pCurrProgram, "MV"); GetUniformLocation(MatN, *pCurrProgram, "N"); GetUniformLocation(MatP, *pCurrProgram, "P"); // Get the Light uniform handles GetUniformLocation(Bones, *pCurrProgram, "Bones"); GetUniformLocation(LightType, *pCurrProgram, "LightType"); GetUniformLocation(LightPosition_eyespace, *pCurrProgram, "LightPosition_eyespace"); GetUniformLocation(LightDiffuse, *pCurrProgram, "LightDiffuse"); GetUniformLocation(LightAmbient, *pCurrProgram, "LightAmbient"); GetUniformLocation(LightSpecular, *pCurrProgram, "LightSpecular"); GetUniformLocation(LightLinearAttenuation, *pCurrProgram, "linearAttenuation"); GetUniformLocation(LightConstantAttenuation, *pCurrProgram, "constantAttenuation"); GetUniformLocation(LightQuadraticAttenuation, *pCurrProgram, "quadraticAttenuation"); // Materials GetUniformLocation(MaterialType, *pCurrProgram, "MaterialType"); GetUniformLocation(DiffuseTexture, *pCurrProgram, "DiffuseMap"); GetUniformLocation(BumpmapTexture, *pCurrProgram, "NormalMap"); GetUniformLocation(SpecularTexture, *pCurrProgram, "SpecularMap"); GetUniformLocation(RenderedTexture, *pCurrProgram, "RenderedTexture"); GetUniformLocation(DepthTexture, *pCurrProgram, "DepthTexture"); GetUniformLocation(DiffuseColor, *pCurrProgram, "DiffuseColor"); GetUniformLocation(AmbientColor, *pCurrProgram, "AmbientColor"); GetUniformLocation(SpecularColor, *pCurrProgram, "SpecularColor"); GetUniformLocation(Shininess, *pCurrProgram, "Shininess"); glBindFragDataLocation(*pCurrProgram, 0, "Color0"); // Relink for the output locations glLinkProgram(*pCurrProgram); } while(*++pCurrProgram != 0); }
//---------------------------------------------------------------------------------- static GLuint CreateVertexArray(const VertexArray::DeclarationList& declarations, boost::shared_ptr<IndexBuffer> indexBuffer) { GLuint vao; glGenVertexArrays(1, &vao); glBindVertexArray(vao); if (indexBuffer) { indexBuffer->Enable(); } for (VertexArray::DeclarationList::const_iterator iter = declarations.cbegin(); iter != declarations.cend(); ++iter) { (*iter)->vertexBuffer->Enable(); for (size_t i = 0; i < (*iter)->attributes.size(); ++i) { // The locations of attributes are fixed globally in the shader so they need to be found by attribute semantic... const GLuint attribIndex = GetAttribLocation((*iter)->attributes[i].semantic); // Now, enable and configure that particular location... LOG( "vertex array: %s - %d x %s @ %d\n", (*iter)->attributes[i].semantic.c_str(), (*iter)->attributes[i].size, GetAttribTypeName((*iter)->attributes[i].type), attribIndex ); glEnableVertexAttribArray(attribIndex); glVertexAttribPointer(attribIndex, (*iter)->attributes[i].size, (*iter)->attributes[i].type, GL_FALSE, (*iter)->stride, (const void*)(*iter)->attributes[i].offset); } } glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); if (indexBuffer) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } return vao; }
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ // bool GfxProgram::Create(GfxShader* vertex_shader, GfxShader* fragment_shader, const char *lpstrLocation ) { VertexShader = vertex_shader; FragmentShader = fragment_shader; m_Id = glCreateProgram(); glAttachShader(m_Id, VertexShader->GetId()); glAttachShader(m_Id, FragmentShader->GetId()); glLinkProgram(m_Id); check_gl(); printf("Created program id %d from vs %d and fs %d\n", m_Id, VertexShader->GetId(), FragmentShader->GetId()); // Prints the information log for a program object char log[1024]; glGetProgramInfoLog(m_Id,sizeof log,NULL,log); printf("%d:program:\n%s\n", m_Id, log); m_loc = 0; if (lpstrLocation != NULL) { GetAttribLocation( lpstrLocation ); } return true; }
void GLShadowMapShader::GetShaderLocations() { uint* pCurrProgram = &ProgramID[0]; do { // Attribute locations GetAttribLocation(Vertex, *pCurrProgram, "Position"); GLERROR(); GetAttribLocation(VertexJoint, *pCurrProgram, "Joints"); GLERROR(); GetAttribLocation(VertexWeight, *pCurrProgram, "Weights"); GLERROR(); // Uniform locations GetUniformLocation(MatMVP, *pCurrProgram, "MVP"); GLERROR(); GetUniformLocation(Bones, *pCurrProgram, "Bones"); GLERROR(); // Output locations glBindFragDataLocation(*pCurrProgram, 0, "Color0"); GLERROR(); glLinkProgram(*pCurrProgram); } while(*++pCurrProgram != 0); }
// Misc Functions bool bind_shader_variables2(GLuint h_program) { h_gWVP = GetUniformLocation(h_program, "gWVP"); // h_gWorld = GetUniformLocation(h_program, "gWorld"); h_Position = GetAttribLocation( h_program, "Position"); h_TexCoord = GetAttribLocation( h_program, "TexCoord"); h_Normal = GetAttribLocation( h_program, "Normal"); h_AmbientProduct = GetUniformLocation( h_program, "AmbientProduct"); h_DiffuseProduct = GetUniformLocation( h_program, "DiffuseProduct"); h_SpecularProduct = GetUniformLocation( h_program, "SpecularProduct"); h_LightPosition = GetUniformLocation( h_program, "LightPosition"); h_Shineness = GetUniformLocation( h_program, "Shineness"); h_gSampler = GetUniformLocation( h_program, "gSampler"); //enable depth testing glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); return ( (h_gWorld && h_gWVP) ) ? true : false; }
void THDefProgram::Load() { const GLchar* vs= "precision mediump float;" "uniform vec3 projMat[2];" "attribute vec2 aVert;" "attribute vec2 aRot;" "attribute vec2 aScale;" "attribute vec2 aPos;" "attribute vec2 aCenter;" "attribute vec4 aTex;" "varying vec2 vTex;" "void main(){" "vec2 svert=(aVert-aCenter)*aScale;" "vec2 rp=vec2( dot(vec2(aRot.x,-aRot.y),svert) , dot(vec2(aRot.y,aRot.x),svert) );" "vec3 rrp=vec3(rp + aPos , 1.0);" "gl_Position=vec4(dot(projMat[0],rrp),dot(projMat[1],rrp),0.0,1.0);" "vTex=aVert*aTex.zw + aTex.xy;" "}"; const GLchar* fs= "precision mediump float;" "varying vec2 vTex;" "uniform sampler2D sTexture;" "uniform vec4 aColor;" "uniform vec4 mColor;" "void main(){" "gl_FragColor=texture2D(sTexture,vTex)*mColor + aColor;" "}"; THProgram::Load(vs,fs); vertexHandler=GetAttribLocation("aVert"); rotationHandler=GetAttribLocation("aRot"); scaleHandler=GetAttribLocation("aScale"); positionHandler=GetAttribLocation("aPos"); textureHandler=GetAttribLocation("aTex"); centerHandler=GetAttribLocation("aCenter"); projectMatrixHandler=GetUniformLocation("projMat"); colorAddHandler=GetUniformLocation("aColor"); colorMultiplyHandler=GetUniformLocation("mColor"); }
GL_APICALL int GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name) { CONTEXT_EXEC_RETURN(GetAttribLocation(program, name)); }