void Drawable2D::UpdateMaterial() { // Delay the material update if (materialUpdatePending_) return; Material* material = batches_[0].material_; assert(material); // If we are using the default created material, we can update blend mode. Otherwise must respect what is set in the material if (!material_) { Technique* technique = material->GetTechnique(0); Pass* pass = technique->GetPass(PASS_ALPHA); if (pass) pass->SetBlendMode(blendMode_); } // Update diffuse texture from sprite if (sprite_) { Texture2D* texture = sprite_->GetTexture(); material->SetTexture(TU_DIFFUSE, texture); } }
void Material::CheckOcclusion() { // Determine occlusion by checking the base pass of each technique occlusion_ = false; for (unsigned i = 0; i < techniques_.Size(); ++i) { Technique* tech = techniques_[i].technique_; if (tech) { Pass* pass = tech->GetPass(PASS_BASE); if (pass && pass->GetDepthWrite() && !pass->GetAlphaMask()) occlusion_ = true; } } }
Pass* Material::GetPass(unsigned index, StringHash passType) const { Technique* tech = index < techniques_.Size() ? techniques_[index].technique_ : (Technique*)0; return tech ? tech->GetPass(passType) : 0; }