}
+//------------------------------------------------------------------------------
+// Function : SkyMaterial::Force
+// Description :
+//------------------------------------------------------------------------------
+/**
+ * @fn SkyMaterial::Force()
+ * @brief @todo <WRITE BRIEF SkyMaterial::SetMaterialPropertiesForDisplay DOCUMENTATION>
+ *
+ * @todo <WRITE EXTENDED SkyMaterial::SetMaterialPropertiesForDisplay FUNCTION DOCUMENTATION>
+ */
+SKYRESULT SkyMaterial::Force()
+{
+ // Update the cached current material, and only pass values that have changed to the GL.
+
+ SkyMaterial *pCurrentMaterial = GraphicsContext::InstancePtr()->GetCurrentMaterial();
+ assert(NULL != pCurrentMaterial);
+
+ // basic material properties
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, &(GetDiffuse().x));
+ pCurrentMaterial->SetDiffuse(GetDiffuse());
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, &(GetSpecular().x));
+ pCurrentMaterial->SetSpecular(GetSpecular());
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, &(GetAmbient().x));
+ pCurrentMaterial->SetAmbient(GetAmbient());
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, &(GetEmissive().x));
+ pCurrentMaterial->SetEmissive(GetEmissive());
+
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, GetSpecularPower());
+ pCurrentMaterial->SetSpecularPower(GetSpecularPower());
+
+ // lighting
+ if (IsLightingEnabled())
+ glEnable(GL_LIGHTING);
+ else
+ glDisable(GL_LIGHTING);
+ pCurrentMaterial->EnableLighting(IsLightingEnabled());
+
+ // color material (which material property tracks color calls)
+ glColorMaterial(GetColorMaterialFace(), GetColorMaterialMode());
+ pCurrentMaterial->SetColorMaterialFace(GetColorMaterialFace());
+ pCurrentMaterial->SetColorMaterialMode(GetColorMaterialMode());
+
+ if (IsColorMaterialEnabled())
+ glEnable(GL_COLOR_MATERIAL);
+ else
+ glDisable(GL_COLOR_MATERIAL);
+ pCurrentMaterial->EnableColorMaterial(IsColorMaterialEnabled());
+
+ // fog
+ glFogf(GL_FOG_MODE, GetFogMode());
+ pCurrentMaterial->SetFogMode(GetFogMode());
+
+ glFogfv(GL_FOG_COLOR, GetFogColor());
+ pCurrentMaterial->SetFogColor(GetFogColor());
+
+ glFogf(GL_FOG_DENSITY, GetFogParameter(GL_FOG_DENSITY));
+ pCurrentMaterial->SetFogParameter(GL_FOG_DENSITY, GetFogParameter(GL_FOG_DENSITY));
+
+ glFogf(GL_FOG_START, GetFogParameter(GL_FOG_START));
+ pCurrentMaterial->SetFogParameter(GL_FOG_START, GetFogParameter(GL_FOG_START));
+ glFogf(GL_FOG_END, GetFogParameter(GL_FOG_END));
+ pCurrentMaterial->SetFogParameter(GL_FOG_END, GetFogParameter(GL_FOG_END));
+
+ if (IsFogEnabled())
+ glEnable(GL_FOG);
+ else
+ glDisable(GL_FOG);
+ pCurrentMaterial->EnableFog(IsFogEnabled());
+
+ // depth test
+ glDepthFunc(GetDepthFunc());
+ pCurrentMaterial->SetDepthFunc(GetDepthFunc());
+
+ glDepthMask(GetDepthMask());
+ pCurrentMaterial->SetDepthMask(GetDepthMask());
+
+ if (IsDepthTestEnabled())
+ glEnable(GL_DEPTH_TEST);
+ else
+ glDisable(GL_DEPTH_TEST);
+ pCurrentMaterial->EnableDepthTest(IsDepthTestEnabled());
+
+ // alpha test
+ glAlphaFunc(GetAlphaFunc(), GetAlphaRef());
+ pCurrentMaterial->SetAlphaFunc(GetAlphaFunc());
+ pCurrentMaterial->SetAlphaRef(GetAlphaRef());
+
+ if (IsAlphaTestEnabled())
+ glEnable(GL_ALPHA_TEST);
+ else
+ glDisable(GL_ALPHA_TEST);
+
+ // blending
+ glBlendFunc(GetBlendingSourceFactor(), GetBlendingDestFactor());
+ pCurrentMaterial->SetBlendFunc(GetBlendingSourceFactor(), GetBlendingDestFactor());
+
+ if (IsBlendingEnabled())
+ glEnable(GL_BLEND);
+ else
+ glDisable(GL_BLEND);
+ pCurrentMaterial->EnableBlending(IsBlendingEnabled());
+
+ glCullFace(GetFaceCullingMode());
+ pCurrentMaterial->SetFaceCullingMode(GetFaceCullingMode());
+
+ if (IsFaceCullingEnabled())
+ glEnable(GL_CULL_FACE);
+ else
+ glDisable(GL_CULL_FACE);
+ pCurrentMaterial->EnableFaceCulling(IsFaceCullingEnabled());
+
+ // texturing
+ FAIL_RETURN(_textureState.Force());
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GetTextureApplicationMode());
+ pCurrentMaterial->SetTextureApplicationMode(GetTextureApplicationMode());
+
+ return SKYRESULT_OK;
+}
+
+
~SkyMaterial();
SKYRESULT Activate();
+ SKYRESULT Force();
// Getters for basic material properties
}
else
{//cout << "Using impostor image\n";
- if (!_pBackTexture || (bDisplayFrontOfSplit && !_pFrontTexture))
- FAIL_RETURN_MSG(SKYRESULT_FAIL, "SkyRenderableInstanceCloud::Display(): missing texture!");
+ if (!_pBackTexture || (bDisplayFrontOfSplit && !_pFrontTexture)) {
+ cout << "texture id failure" << endl;
+ FAIL_RETURN_MSG(SKYRESULT_FAIL, "SkyRenderableInstanceCloud::Display(): missing texture!");
+ }
s_pMaterial->SetTexture(0, GL_TEXTURE_2D, bDisplayFrontOfSplit ? *_pFrontTexture : *_pBackTexture);
if (_bScreenImpostor)
}
s_pMaterial->Activate();
+ // s_pMaterial->Force();
Vec3f x, y, z;
SKYRESULT SkySceneManager::Display( const Camera &cam )
{
+ // _clearMaterial.Force();
_clearMaterial.Activate();
//glClear(GL_DEPTH_BUFFER_BIT);
{
GLenum eTarget = GetActiveTarget(i);
unsigned int iID = GetTextureID(i);
- if ((pCurrent->GetActiveTarget(i) != eTarget) ||
- (pCurrent->GetTextureID(i) != iID))
- {
+ // if ((pCurrent->GetActiveTarget(i) != eTarget) ||
+ // (pCurrent->GetTextureID(i) != iID))
+ // {
FAIL_RETURN(pCurrent->SetTexture(i, eTarget, iID));
glBindTexture(eTarget, iID);
- }
+ // }
//GLVU::CheckForGLError("SkyTextureState::Activate(5)");
GLenum paramValue = GetTextureParameter(i, GL_TEXTURE_WRAP_S);
if (pCurrent->GetTextureParameter(i, GL_TEXTURE_WRAP_S) != paramValue)
}
+//------------------------------------------------------------------------------
+// Function : SkyTextureState::Force
+// Description :
+//------------------------------------------------------------------------------
+/**
+ * @fn SkyTextureState::Force()
+ * @brief @todo <WRITE BRIEF SkyTextureState::Activate DOCUMENTATION>
+ *
+ * @todo <WRITE EXTENDED SkyTextureState::Activate FUNCTION DOCUMENTATION>
+ */
+SKYRESULT SkyTextureState::Force()
+{
+ SkyTextureState *pCurrent = GraphicsContext::InstancePtr()->GetCurrentTextureState();
+ assert(NULL != pCurrent);
+ //GLVU::CheckForGLError("SkyTextureState::Activate(8)");
+ for (unsigned int i = 0; i < s_iNumTextureUnits; ++i)
+ {
+#ifdef GL_ARB_multitexture
+ if (s_iNumTextureUnits > 1)
+ glActiveTextureARB(GL_TEXTURE0_ARB + i);
+#endif
+ bool bEnabled = IsTextureEnabled(i);
+ FAIL_RETURN(pCurrent->EnableTexture(i, bEnabled));
+ //GLVU::CheckForGLError("SkyTextureState::Activate(7)");
+ if (bEnabled)
+ glEnable(GetActiveTarget(i));
+ else
+ glDisable(GetActiveTarget(i));
+
+ //GLVU::CheckForGLError("SkyTextureState::Activate(6)");
+ GLenum eTarget = GetActiveTarget(i);
+ unsigned int iID = GetTextureID(i);
+
+ FAIL_RETURN(pCurrent->SetTexture(i, eTarget, iID));
+ glBindTexture(eTarget, iID);
+
+ //GLVU::CheckForGLError("SkyTextureState::Activate(5)");
+ GLenum paramValue = GetTextureParameter(i, GL_TEXTURE_WRAP_S);
+ FAIL_RETURN(pCurrent->SetTextureParameter(i, GL_TEXTURE_WRAP_S, paramValue));
+ glTexParameteri(eTarget, GL_TEXTURE_WRAP_S, paramValue);
+
+ //GLVU::CheckForGLError("SkyTextureState::Activate(4)");
+ paramValue = GetTextureParameter(i, GL_TEXTURE_WRAP_T);
+ FAIL_RETURN(pCurrent->SetTextureParameter(i, GL_TEXTURE_WRAP_T, paramValue));
+ glTexParameteri(eTarget, GL_TEXTURE_WRAP_T, paramValue);
+
+ //GLVU::CheckForGLError("SkyTextureState::Activate(3)");
+ paramValue = GetTextureParameter(i, GL_TEXTURE_WRAP_R);
+ FAIL_RETURN(pCurrent->SetTextureParameter(i, GL_TEXTURE_WRAP_R, paramValue));
+ glTexParameteri(eTarget, GL_TEXTURE_WRAP_R, paramValue);
+
+ //GLVU::CheckForGLError("SkyTextureState::Activate(2)");
+ paramValue = GetTextureParameter(i, GL_TEXTURE_MIN_FILTER);
+ FAIL_RETURN(pCurrent->SetTextureParameter(i, GL_TEXTURE_MIN_FILTER, paramValue));
+ glTexParameteri(eTarget, GL_TEXTURE_MIN_FILTER, paramValue);
+
+ //GLVU::CheckForGLError("SkyTextureState::Activate(1)");
+ paramValue = GetTextureParameter(i, GL_TEXTURE_MAG_FILTER);
+ FAIL_RETURN(pCurrent->SetTextureParameter(i, GL_TEXTURE_MAG_FILTER, paramValue));
+ glTexParameteri(eTarget, GL_TEXTURE_MIN_FILTER, paramValue);
+
+#ifdef GL_ARB_multitexture
+ if (s_iNumTextureUnits > 1)
+ glActiveTextureARB(GL_TEXTURE0_ARB);
+#endif
+ }
+ return SKYRESULT_OK;
+}
+
+
//------------------------------------------------------------------------------
// Function : SkyTextureState::SetTexture
// Description :
SkyTextureState();
~SkyTextureState();
+ SKYRESULT Force();
SKYRESULT Activate();
SKYRESULT SetTexture(unsigned int iTextureUnit, GLenum eTarget, SkyTexture& texture);