//---------------------------------------------------------------------------- void LinearDepth_Material::Draw(Renderer* renderer, const VisibleSet& visibleSet) { EnvirParamController *curEnvirParam = PX2_GR.GetCurEnvirParamController(); mOverRideOffsetProperty->FillEnabled = true; mOverRideOffsetProperty->Scale = curEnvirParam->GetShadowMap_OffsetPropertyScale(); mOverRideOffsetProperty->Bias = curEnvirParam->GetShadowMap_OffsetPropertyBias(); renderer->SetOverrideOffsetProperty(mOverRideOffsetProperty); const int numVisible = visibleSet.GetNumVisible(); for (int j = 0; j < numVisible; ++j) { Renderable *renderable = visibleSet.GetVisible(j); MaterialInstancePtr save = renderable->GetMaterialInstance(); const std::string &mtlName = save->GetMaterial()->GetName(); if ("std" == mtlName) { mInstanceStd->SetPixelTexture(0, "SampleBase", save->GetPixelTexture(0, "SampleBase")); renderable->SetMaterialInstance(mInstanceStd); renderer->Draw(renderable); renderable->SetMaterialInstance(save); save->Update(0.0f, 0.0f); } else if ("skinskeleton" == mtlName) { //mInstanceSkinSkeleton->SetPixelTexture(0, "SampleBase", save->GetPixelTexture(0, "SampleBase")); //renderable->SetMaterialInstance(mInstanceSkinSkeleton); renderer->Draw(renderable); //renderable->SetMaterialInstance(save); //save->Update(0.0f, 0.0f); } else if ("terrain" == mtlName) { renderable->SetMaterialInstance(mInstanceTerrain); renderer->Draw(renderable); renderable->SetMaterialInstance(save); save->Update(0.0f, 0.0f); } } renderer->SetOverrideOffsetProperty(0); }
//----------------------------------------------------------------------------- void ProjTreeItem::SetTreeLevel(ProjTreeLevel level, bool isShowHelpNode) { mTreeLevel = level; mIsShowHelpNode = isShowHelpNode; Project *proj = DynamicCast<Project>(mObject); Scene *scene = DynamicCast<Scene>(mObject); if (proj || scene) return; Actor *actor = DynamicCast<Actor>(mObject); Movable *mov = DynamicCast<Movable>(mObject); Node *node = DynamicCast<Node>(mObject); Renderable *renderable = DynamicCast<Renderable>(mObject); EffectableController *effectableCtrl = DynamicCast<EffectableController>(mObject); Material *mtl = DynamicCast<Material>(mObject); MaterialTechnique *mtlTechnique = DynamicCast<MaterialTechnique>(mObject); MaterialPass *mtlPass = DynamicCast<MaterialPass>(mObject); if (!mObject) { // IT_CATALOG for (int i = 0; i < (int)mChildItems.size(); i++) { ProjTreeItem *item = mChildItems[i]; if (item) item->SetTreeLevel(level, isShowHelpNode); } return; } else { ClearChildren(); } bool addCtrl = false; bool addModule = false; bool addNode = false; bool addMaterial = false; if (PTL_GENERAL == mTreeLevel) { } else if (PTL_CHILDREN == mTreeLevel) { if (!scene && !proj && node) { addNode = true; } } else if (PTL_CONTROLS == mTreeLevel) { if (!scene && !proj && mov) { addCtrl = true; } if (!scene && !proj && node) { addNode = true; } if (effectableCtrl) { addModule = true; } } else if (PTL_MATERIALS == mTreeLevel) { if (!scene && !proj && mov) { addCtrl = true; } if (!scene && !proj && node) { addNode = true; } if (renderable) { addMaterial = true; } } else if (PTL_DETAIL == mTreeLevel) { if (!scene && !proj && mov) { addCtrl = true; } if (!scene && !proj && node) { addNode = true; } if (renderable) { addMaterial = true; } } if (addCtrl) { int numCtrls = mov->GetNumControllers(); for (int i = 0; i < numCtrls; i++) { Controller *ctrl = mov->GetController(i); AddChild(ctrl, mIconID, mTreeLevel, mIsShowHelpNode); } } if (addMaterial) { MaterialInstance *mtlInst = renderable->GetMaterialInstance(); Material *mtl = mtlInst->GetMaterial(); AddChild(mtl, mIconID, mTreeLevel, mIsShowHelpNode); } if (mtl) { int numTechniques = mtl->GetNumTechniques(); for (int i = 0; i < numTechniques; i++) { MaterialTechnique *mtlTechnique = mtl->GetTechnique(i); AddChild(mtlTechnique, mIconID, mTreeLevel, isShowHelpNode); } } if (mtlTechnique) { int numPasses = mtlTechnique->GetNumPasses(); for (int i = 0; i < numPasses; i++) { MaterialPass *mtlPass = mtlTechnique->GetPass(i); AddChild(mtlPass, mIconID, mTreeLevel, isShowHelpNode); } } if (mtlPass) { AddChild(mtlPass->GetVertexShader(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetPixelShader(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetAlphaProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetCullProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetDepthProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetOffsetProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetStencilProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetWireProperty(), mIconID, mTreeLevel, isShowHelpNode); } if (addModule) { int numModules = effectableCtrl->GetNumModules(); for (int i = 0; i < numModules; i++) { EffectModule *module = effectableCtrl->GetModule(i); AddChild(module, mIconID, mTreeLevel, mIsShowHelpNode); } } if (addNode) { int numChildren = node->GetNumChildren(); for (int i = 0; i < numChildren; i++) { Movable *child = node->GetChild(i); if (child) { bool ingore = false; if (!isShowHelpNode && ("HelpNode" == child->GetName())) ingore = true; if (!ingore) { AddChild(child, mIconID, mTreeLevel, mIsShowHelpNode); } } } } }