Fix two bugs in content_cao
authorsfan5 <sfan5@live.de>
Sun, 24 May 2020 09:48:51 +0000 (11:48 +0200)
committerGitHub <noreply@github.com>
Sun, 24 May 2020 09:48:51 +0000 (11:48 +0200)
fixes #9889 (backface_culling with visual = "cube")
fixes #9916 (crash with visual = "upright_sprite")

src/client/content_cao.cpp

index 867bbf2c8f1b6388ff148a21144d337ddf08cbb4..cdc12f04194aa0bbea4bb68404e1df195051a71b 100644 (file)
@@ -713,6 +713,8 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
                mesh->drop();
 
                m_meshnode->setScale(m_prop.visual_size);
+               m_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING,
+                       m_prop.backface_culling);
 
                setSceneNodeMaterial(m_meshnode);
        } else if (m_prop.visual == "mesh") {
@@ -832,19 +834,20 @@ void GenericCAO::setNodeLight(u8 light)
        }
 
        if (m_enable_shaders) {
-               scene::ISceneNode *node = getSceneNode();
-
-               if (node == nullptr)
-                       return;
-
                if (m_prop.visual == "upright_sprite") {
+                       if (!m_meshnode)
+                               return;
+
                        scene::IMesh *mesh = m_meshnode->getMesh();
                        for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
                                scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
-                               video::SMaterial &material = buf->getMaterial();
-                               material.EmissiveColor = color;
+                               buf->getMaterial().EmissiveColor = color;
                        }
                } else {
+                       scene::ISceneNode *node = getSceneNode();
+                       if (!node)
+                               return;
+
                        for (u32 i = 0; i < node->getMaterialCount(); ++i) {
                                video::SMaterial &material = node->getMaterial(i);
                                material.EmissiveColor = color;