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);
}
Ejemplo n.º 2
0
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++;
}