//---------------------------------------------------------------------------- void Renderer::Disable (const Renderable* renderable, const MaterialInstance* instance, int index) { PX2_UNUSED(renderable); const MaterialPass* pass = instance->GetPass(index); ShaderParameters* vparams = instance->GetVertexParameters(index); ShaderParameters* pparams = instance->GetPixelParameters(index); VertexShader* vshader = pass->GetVertexShader(); PixelShader* pshader = pass->GetPixelShader(); PdrMaterialPass *pdrMaterialPass = 0; if (1 == (int)msRenderers.size()) { pdrMaterialPass = (PdrMaterialPass*)pass->PdrPointer; pdrMaterialPass->Disable(this); } else { MaterialPassMap::iterator iter = mMaterialPasses.find(pass); if (iter != mMaterialPasses.end()) { pdrMaterialPass = iter->second; pdrMaterialPass->Disable(this); } } Disable(vshader, vparams); Disable(pshader, pparams); }
//---------------------------------------------------------------------------- void Renderer::Enable (const Renderable* renderable, const MaterialInstance* instance, int index) { const MaterialPass* pass = instance->GetPass(index); MaterialPassMap::iterator iter = mMaterialPasses.find(pass); PdrMaterialPass *pdrMaterialPass; if (iter != mMaterialPasses.end()) { pdrMaterialPass = iter->second; } else { pdrMaterialPass = new0 PdrMaterialPass(this, pass); mMaterialPasses[pass] = pdrMaterialPass; } ShaderParameters* vparams = instance->GetVertexParameters(index); ShaderParameters* pparams = instance->GetPixelParameters(index); VertexShader* vshader = pass->GetVertexShader(); PixelShader* pshader = pass->GetPixelShader(); // 更新着色器常量 vparams->UpdateConstants(renderable, mCamera); pparams->UpdateConstants(renderable, mCamera); // 设置渲染状态 SetAlphaProperty(pass->GetAlphaProperty()); SetCullProperty(pass->GetCullProperty()); SetDepthProperty(pass->GetDepthProperty()); SetOffsetProperty(pass->GetOffsetProperty()); SetStencilProperty(pass->GetStencilProperty()); SetWireProperty(pass->GetWireProperty()); // 激活着色器 pdrMaterialPass->Enable(this); Enable(vshader, vparams); Enable(pshader, pparams); }
//---------------------------------------------------------------------------- void Renderer::Enable (const Renderable* renderable, const MaterialInstance* instance, int index) { const MaterialPass* pass = instance->GetPass(index); PdrMaterialPass *pdrMaterialPass = 0; if (1 == (int)msRenderers.size()) { if (pass->PdrPointer) { pdrMaterialPass = (PdrMaterialPass*)pass->PdrPointer; } else { pdrMaterialPass = new0 PdrMaterialPass(this, pass); mMaterialPasses[pass] = pdrMaterialPass; ((MaterialPass*)pass)->PdrPointer = pdrMaterialPass; } } else { MaterialPassMap::iterator iter = mMaterialPasses.find(pass); if (iter != mMaterialPasses.end()) { pdrMaterialPass = iter->second; } else { pdrMaterialPass = new0 PdrMaterialPass(this, pass); mMaterialPasses[pass] = pdrMaterialPass; } } ShaderParameters* vparams = instance->GetVertexParameters(index); ShaderParameters* pparams = instance->GetPixelParameters(index); VertexShader* vshader = pass->GetVertexShader(); PixelShader* pshader = pass->GetPixelShader(); ShaderStruct struc; struc.TheRenderable = (Renderable *)renderable; struc.TheCamera = (Camera *)mCamera; struc.TheEnvirParam = PX2_GR.GetCurEnvirParam(); // 更新着色器常量 vparams->UpdateConstants(&struc); pparams->UpdateConstants(&struc); // 设置渲染状态 SetAlphaProperty(pass->GetAlphaProperty()); SetCullProperty(pass->GetCullProperty()); SetDepthProperty(pass->GetDepthProperty()); SetOffsetProperty(pass->GetOffsetProperty()); SetStencilProperty(pass->GetStencilProperty()); SetWireProperty(pass->GetWireProperty()); // 激活着色器 pdrMaterialPass->Enable(this); Enable(vshader, vparams); Enable(pshader, pparams); }