STKMesh: Force readonly materials.

We never changed materials on the fly but better safe than sorry.
This commit is contained in:
Vincent Lejeune
2014-02-12 18:31:21 +01:00
parent bff2208947
commit 8c5a5b9b20
2 changed files with 11 additions and 2 deletions

View File

@@ -150,7 +150,7 @@ STKMesh::STKMesh(irr::scene::IMesh* mesh, ISceneNode* parent, irr::scene::IScene
const irr::core::vector3df& scale) :
CMeshSceneNode(mesh, parent, mgr, id, position, rotation, scale)
{
createGLMeshes();
setMesh(mesh);
}
void STKMesh::createGLMeshes()
@@ -185,11 +185,18 @@ void STKMesh::cleanGLMeshes()
void STKMesh::setMesh(irr::scene::IMesh* mesh)
{
CMeshSceneNode::setReadOnlyMaterials(true);
CMeshSceneNode::setMesh(mesh);
cleanGLMeshes();
createGLMeshes();
}
void STKMesh::setReadOnlyMaterials(bool readonly)
{
if (!readonly)
Log::error("STKMesh", "Cannot set non read only material, use setMesh instead");
}
STKMesh::~STKMesh()
{
cleanGLMeshes();
@@ -982,7 +989,8 @@ void STKMesh::render()
scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i);
if (mb)
{
const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i];
assert(isReadOnlyMaterials());
const video::SMaterial& material = Materials[i];
video::IMaterialRenderer* rnd = driver->getMaterialRenderer(material.MaterialType);
bool transparent = (rnd && rnd->isTransparent());

View File

@@ -73,6 +73,7 @@ public:
const irr::core::vector3df& scale = irr::core::vector3df(1.0f, 1.0f, 1.0f));
virtual void render();
virtual void setMesh(irr::scene::IMesh* mesh);
void setReadOnlyMaterials(bool readonly);
~STKMesh();
};