Fix two bugs in content_cao

fixes #9889 (backface_culling with visual = "cube")
fixes #9916 (crash with visual = "upright_sprite")
This commit is contained in:
sfan5 2020-05-24 11:48:51 +02:00 committed by GitHub
parent 5430770b68
commit f51cf7c68a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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