ForwardShader::ForwardShader (const std::string& vertShader, const std::string& fragShader) : UberShader(vertShader, fragShader) { b_animatedGeometry = glGetUniformLocation(m_program, "b_animatedGeometry"); m_attributeLerp = glGetUniformLocation(m_program, "attributeLerp"); m_vPosition0 = glGetAttribLocation(m_program, "vPosition0"); m_vNormal0 = glGetAttribLocation(m_program, "vNormal0"); m_vTexCoord0 = glGetAttribLocation(m_program, "vTexCoord0"); m_vPosition1 = glGetAttribLocation(m_program, "vPosition1"); m_vNormal1 = glGetAttribLocation(m_program, "vNormal1"); m_vTexCoord1 = glGetAttribLocation(m_program, "vTexCoord1"); m_projectionMatrix = glGetUniformLocation(m_program, "projectionMatrix"); m_modelviewMatrix = glGetUniformLocation(m_program, "modelviewMatrix"); b_useDiffuseTexture = glGetUniformLocation(m_program, "b_useDiffuseTexture"); b_useEnvironmentMap = glGetUniformLocation(m_program, "b_useEnvironmentMap"); b_useNormalMap = glGetUniformLocation(m_program, "b_useNormalMap"); m_eyePosition = glGetUniformLocation(m_program, "eyePosition"); m_lightDirection = glGetUniformLocation(m_program, "lightDirection"); m_lightCombinedAmbient = glGetUniformLocation(m_program, "lightCombinedAmbient"); m_lightCombinedDiffuse = glGetUniformLocation(m_program, "lightCombinedDiffuse"); m_lightCombinedSpecular = glGetUniformLocation(m_program, "lightCombinedSpecular"); m_materialSpecularExponent = glGetUniformLocation(m_program, "materialSpecularExponent"); m_materialGloss = glGetUniformLocation(m_program, "materialGloss"); m_materialOpacity = glGetUniformLocation(m_program, "materialOpacity"); b_usePointLight = glGetUniformLocation(m_program, "b_usePointLight"); m_pointLightPosition = glGetUniformLocation(m_program, "pointLightPosition"); m_pointLightCombinedAmbient = glGetUniformLocation(m_program, "pointLightCombinedAmbient"); m_pointLightCombinedDiffuse = glGetUniformLocation(m_program, "pointLightCombinedDiffuse"); m_pointLightCombinedSpecular = glGetUniformLocation(m_program, "pointLightCombinedSpecular"); m_pointLightRange = glGetUniformLocation(m_program, "pointLightRange"); m_pointLightAttenuationMultiplier = glGetUniformLocation(m_program, "pointLightAttenuationMultiplier"); // bind samplers to texture units glUniform1i(glGetUniformLocation(m_program, "diffuseTexture"), e_TextureChannelDiffuse - e_TextureChannelFirst); glUniform1i(glGetUniformLocation(m_program, "environmentMap"), e_TextureChannelEnvMap - e_TextureChannelFirst); glUniform1i(glGetUniformLocation(m_program, "normalMap"), e_TextureChannelNormalMap - e_TextureChannelFirst); ForwardShaderState state; SetShaderState(&state); }
void nuiDrawContext::SetShader(nuiShaderProgram* pShader, nuiShaderState* pShaderState) { nuiShaderProgram* pOld = mCurrentState.mpShader; if (pShader == pOld) return; mCurrentState.mpShader = pShader ; if (pShader) { //pShader->CheckValid(); pShader->Acquire(); if (!pShaderState) { pShaderState = pShader->GetCurrentState(); } SetShaderState(pShaderState); } if (pOld) pOld->Release(); mStateChanges++; }