Пример #1
0
void Sprite3D::genMaterial(bool useLight)
{
    _shaderUsingLight = useLight;

    std::unordered_map<const MeshVertexData*, Sprite3DMaterial*> materials;
    for(auto meshVertexData : _meshVertexDatas)
    {
        auto material = getSprite3DMaterialForAttribs(meshVertexData, useLight);
        materials[meshVertexData] = material;
    }
    
    for (auto& mesh: _meshes)
    {
        auto material = materials[mesh->getMeshIndexData()->getMeshVertexData()];
        //keep original state block if exist
        auto oldmaterial = mesh->getMaterial();
        if (oldmaterial)
        {
            material->setStateBlock(oldmaterial->getStateBlock());
        }

        if (material->getReferenceCount() == 1)
            mesh->setMaterial(material);
        else
            mesh->setMaterial(material->clone());
    }
}
Пример #2
0
void GFXDevice::setStateBlockByDesc( const GFXStateBlockDesc &desc )
{
   PROFILE_SCOPE( GFXDevice_SetStateBlockByDesc );
   GFXStateBlock *block = createStateBlock( desc );
   setStateBlock( block );
}