示例#1
0
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);
    }
}
示例#2
0
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;
        }
    }
}
示例#3
0
Pass* Material::GetPass(unsigned index, StringHash passType) const
{
    Technique* tech = index < techniques_.Size() ? techniques_[index].technique_ : (Technique*)0;
    return tech ? tech->GetPass(passType) : 0;
}