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()); } }
void GFXDevice::setStateBlockByDesc( const GFXStateBlockDesc &desc ) { PROFILE_SCOPE( GFXDevice_SetStateBlockByDesc ); GFXStateBlock *block = createStateBlock( desc ); setStateBlock( block ); }