Fixes and improvements

This commit is contained in:
Gregor Parzefall 2023-07-01 10:00:24 +02:00 committed by sfan5
parent 7473e4cafd
commit 6f0d36c41a
11 changed files with 38 additions and 38 deletions

View File

@ -842,7 +842,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
auto &material = buf->getMaterial(); auto &material = buf->getMaterial();
// Apply filter settings // Apply filter settings
material.forEachTexture([this] (video::SMaterialLayer &tex) { material.forEachTexture([this] (auto &tex) {
tex.setFiltersMinetest(m_cache_bilinear_filter, m_cache_trilinear_filter, tex.setFiltersMinetest(m_cache_bilinear_filter, m_cache_trilinear_filter,
m_cache_anistropic_filter); m_cache_anistropic_filter);
}); });

View File

@ -52,7 +52,7 @@ Clouds::Clouds(scene::ISceneManager* mgr,
m_material.FogEnable = true; m_material.FogEnable = true;
m_material.AntiAliasing = video::EAAM_SIMPLE; m_material.AntiAliasing = video::EAAM_SIMPLE;
m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
m_material.forEachTexture([] (video::SMaterialLayer &tex) { m_material.forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
}); });

View File

@ -254,7 +254,7 @@ void TestCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
// Set material // Set material
buf->getMaterial().Lighting = false; buf->getMaterial().Lighting = false;
buf->getMaterial().BackfaceCulling = false; buf->getMaterial().BackfaceCulling = false;
buf->getMaterial().setTexture(0, tsrc->getTextureForMesh("rat.png")); buf->getMaterial().TextureLayers[0].Texture = tsrc->getTextureForMesh("rat.png");
buf->getMaterial().TextureLayers[0].MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; buf->getMaterial().TextureLayers[0].MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
buf->getMaterial().TextureLayers[0].MagFilter = video::ETMAGF_NEAREST; buf->getMaterial().TextureLayers[0].MagFilter = video::ETMAGF_NEAREST;
buf->getMaterial().FogEnable = true; buf->getMaterial().FogEnable = true;
@ -652,7 +652,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
mat.GouraudShading = false; mat.GouraudShading = false;
mat.NormalizeNormals = true; mat.NormalizeNormals = true;
} }
mat.forEachTexture([] (video::SMaterialLayer &tex) { mat.forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
}); });
@ -668,7 +668,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
m_matrixnode, v2f(1, 1), v3f(0,0,0), -1); m_matrixnode, v2f(1, 1), v3f(0,0,0), -1);
m_spritenode->grab(); m_spritenode->grab();
video::ITexture *tex = tsrc->getTextureForMesh("no_texture.png"); video::ITexture *tex = tsrc->getTextureForMesh("no_texture.png");
m_spritenode->forEachMaterial([tex] (video::SMaterial &mat) { m_spritenode->forEachMaterial([tex] (auto &mat) {
mat.setTexture(0, tex); mat.setTexture(0, tex);
}); });
@ -755,7 +755,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
setSceneNodeMaterials(m_meshnode); setSceneNodeMaterials(m_meshnode);
m_meshnode->forEachMaterial([this] (video::SMaterial &mat) { m_meshnode->forEachMaterial([this] (auto &mat) {
mat.BackfaceCulling = m_prop.backface_culling; mat.BackfaceCulling = m_prop.backface_culling;
}); });
} else if (m_prop.visual == "mesh") { } else if (m_prop.visual == "mesh") {
@ -782,7 +782,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
setSceneNodeMaterials(m_animated_meshnode); setSceneNodeMaterials(m_animated_meshnode);
m_animated_meshnode->forEachMaterial([this] (video::SMaterial &mat) { m_animated_meshnode->forEachMaterial([this] (auto &mat) {
mat.BackfaceCulling = m_prop.backface_culling; mat.BackfaceCulling = m_prop.backface_culling;
}); });
} else } else
@ -1354,7 +1354,7 @@ void GenericCAO::updateTextures(std::string mod)
material.SpecularColor = m_prop.colors[0]; material.SpecularColor = m_prop.colors[0];
} }
material.forEachTexture([=] (video::SMaterialLayer &tex) { material.forEachTexture([=] (auto &tex) {
tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter, tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter,
use_anisotropic_filter); use_anisotropic_filter);
}); });
@ -1390,7 +1390,7 @@ void GenericCAO::updateTextures(std::string mod)
use_trilinear_filter &= res > 64; use_trilinear_filter &= res > 64;
use_bilinear_filter &= res > 64; use_bilinear_filter &= res > 64;
material.forEachTexture([=] (video::SMaterialLayer &tex) { material.forEachTexture([=] (auto &tex) {
tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter, tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter,
use_anisotropic_filter); use_anisotropic_filter);
}); });
@ -1437,7 +1437,7 @@ void GenericCAO::updateTextures(std::string mod)
material.SpecularColor = m_prop.colors[i]; material.SpecularColor = m_prop.colors[i];
} }
material.forEachTexture([=] (video::SMaterialLayer &tex) { material.forEachTexture([=] (auto &tex) {
tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter, tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter,
use_anisotropic_filter); use_anisotropic_filter);
}); });
@ -1462,7 +1462,7 @@ void GenericCAO::updateTextures(std::string mod)
material.SpecularColor = m_prop.colors[0]; material.SpecularColor = m_prop.colors[0];
} }
material.forEachTexture([=] (video::SMaterialLayer &tex) { material.forEachTexture([=] (auto &tex) {
tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter, tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter,
use_anisotropic_filter); use_anisotropic_filter);
}); });
@ -1491,7 +1491,7 @@ void GenericCAO::updateTextures(std::string mod)
material.SpecularColor = m_prop.colors[0]; material.SpecularColor = m_prop.colors[0];
} }
material.forEachTexture([=] (video::SMaterialLayer &tex) { material.forEachTexture([=] (auto &tex) {
tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter, tex.setFiltersMinetest(use_bilinear_filter, use_trilinear_filter,
use_anisotropic_filter); use_anisotropic_filter);
}); });
@ -1977,7 +1977,7 @@ void GenericCAO::updateMeshCulling()
if (m_prop.visual == "upright_sprite") { if (m_prop.visual == "upright_sprite") {
// upright sprite has no backface culling // upright sprite has no backface culling
node->forEachMaterial([=] (video::SMaterial &mat) { node->forEachMaterial([=] (auto &mat) {
mat.FrontfaceCulling = hidden; mat.FrontfaceCulling = hidden;
}); });
return; return;
@ -1987,13 +1987,13 @@ void GenericCAO::updateMeshCulling()
// Hide the mesh by culling both front and // Hide the mesh by culling both front and
// back faces. Serious hackyness but it works for our // back faces. Serious hackyness but it works for our
// purposes. This also preserves the skeletal armature. // purposes. This also preserves the skeletal armature.
node->forEachMaterial([] (video::SMaterial &mat) { node->forEachMaterial([] (auto &mat) {
mat.BackfaceCulling = true; mat.BackfaceCulling = true;
mat.FrontfaceCulling = true; mat.FrontfaceCulling = true;
}); });
} else { } else {
// Restore mesh visibility. // Restore mesh visibility.
node->forEachMaterial([this] (video::SMaterial &mat) { node->forEachMaterial([this] (auto &mat) {
mat.BackfaceCulling = m_prop.backface_culling; mat.BackfaceCulling = m_prop.backface_culling;
mat.FrontfaceCulling = false; mat.FrontfaceCulling = false;
}); });

View File

@ -37,15 +37,13 @@ public:
m_spritenode = smgr->addBillboardSceneNode( m_spritenode = smgr->addBillboardSceneNode(
NULL, v2f(1,1), pos, -1); NULL, v2f(1,1), pos, -1);
video::ITexture *tex = env->getGameDef()->tsrc()->getTextureForMesh("smoke_puff.png"); video::ITexture *tex = env->getGameDef()->tsrc()->getTextureForMesh("smoke_puff.png");
m_spritenode->forEachMaterial([tex] (video::SMaterial &mat) { m_spritenode->forEachMaterial([tex] (auto &mat) {
mat.setTexture(0, tex); mat.TextureLayers[0].Texture = tex;
mat.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
mat.Lighting = false; mat.Lighting = false;
mat.TextureLayers[0].MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
mat.TextureLayers[0].MagFilter = video::ETMAGF_NEAREST;
mat.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
mat.FogEnable = true; mat.FogEnable = true;
mat.forEachTexture([] (video::SMaterialLayer &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST;
});
}); });
m_spritenode->setColor(video::SColor(255,0,0,0)); m_spritenode->setColor(video::SColor(255,0,0,0));
m_spritenode->setVisible(true); m_spritenode->setVisible(true);

View File

@ -767,7 +767,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
material.BackfaceCulling = true; material.BackfaceCulling = true;
material.FogEnable = true; material.FogEnable = true;
material.setTexture(0, p.layer.texture); material.setTexture(0, p.layer.texture);
material.forEachTexture([] (video::SMaterialLayer &tex) { material.forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
}); });

View File

@ -100,7 +100,7 @@ scene::IAnimatedMesh* createCubeMesh(v3f scale)
// Set default material // Set default material
buf->getMaterial().Lighting = false; buf->getMaterial().Lighting = false;
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
buf->getMaterial().forEachTexture([] (video::SMaterialLayer &tex) { buf->getMaterial().forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
}); });
@ -410,7 +410,7 @@ scene::IMesh* convertNodeboxesToMesh(const std::vector<aabb3f> &boxes,
{ {
scene::IMeshBuffer *buf = new scene::SMeshBuffer(); scene::IMeshBuffer *buf = new scene::SMeshBuffer();
buf->getMaterial().Lighting = false; buf->getMaterial().Lighting = false;
buf->getMaterial().forEachTexture([] (video::SMaterialLayer &tex) { buf->getMaterial().forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
}); });

View File

@ -608,7 +608,7 @@ void Minimap::drawMinimap(core::rect<s32> rect) {
matrix.makeIdentity(); matrix.makeIdentity();
video::SMaterial &material = m_meshbuffer->getMaterial(); video::SMaterial &material = m_meshbuffer->getMaterial();
material.forEachTexture([] (video::SMaterialLayer &tex) { material.forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_LINEAR_MIPMAP_LINEAR; tex.MinFilter = video::ETMINF_LINEAR_MIPMAP_LINEAR;
tex.MagFilter = video::ETMAGF_LINEAR; tex.MagFilter = video::ETMAGF_LINEAR;
}); });

View File

@ -92,7 +92,7 @@ Particle::Particle(
m_material.Lighting = false; m_material.Lighting = false;
m_material.BackfaceCulling = false; m_material.BackfaceCulling = false;
m_material.FogEnable = true; m_material.FogEnable = true;
m_material.forEachTexture([] (video::SMaterialLayer &tex) { m_material.forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
}); });

View File

@ -113,7 +113,7 @@ void ShadowRenderer::disable()
} }
for (auto node : m_shadow_node_array) for (auto node : m_shadow_node_array)
node.node->forEachMaterial([] (video::SMaterial &mat) { node.node->forEachMaterial([] (auto &mat) {
mat.setTexture(TEXTURE_LAYER_SHADOW, nullptr); mat.setTexture(TEXTURE_LAYER_SHADOW, nullptr);
}); });
} }
@ -185,14 +185,14 @@ void ShadowRenderer::addNodeToShadowList(
// node should never be ClientMap // node should never be ClientMap
assert(strcmp(node->getName(), "ClientMap") != 0); assert(strcmp(node->getName(), "ClientMap") != 0);
node->forEachMaterial([this] (video::SMaterial &mat) { node->forEachMaterial([this] (auto &mat) {
mat.setTexture(TEXTURE_LAYER_SHADOW, shadowMapTextureFinal); mat.setTexture(TEXTURE_LAYER_SHADOW, shadowMapTextureFinal);
}); });
} }
void ShadowRenderer::removeNodeFromShadowList(scene::ISceneNode *node) void ShadowRenderer::removeNodeFromShadowList(scene::ISceneNode *node)
{ {
node->forEachMaterial([] (video::SMaterial &mat) { node->forEachMaterial([] (auto &mat) {
mat.setTexture(TEXTURE_LAYER_SHADOW, nullptr); mat.setTexture(TEXTURE_LAYER_SHADOW, nullptr);
}); });
for (auto it = m_shadow_node_array.begin(); it != m_shadow_node_array.end();) { for (auto it = m_shadow_node_array.begin(); it != m_shadow_node_array.end();) {
@ -264,7 +264,7 @@ void ShadowRenderer::updateSMTextures()
assert(shadowMapTextureFinal != nullptr); assert(shadowMapTextureFinal != nullptr);
for (auto &node : m_shadow_node_array) for (auto &node : m_shadow_node_array)
node.node->forEachMaterial([this] (video::SMaterial &mat) { node.node->forEachMaterial([this] (auto &mat) {
mat.setTexture(TEXTURE_LAYER_SHADOW, shadowMapTextureFinal); mat.setTexture(TEXTURE_LAYER_SHADOW, shadowMapTextureFinal);
}); });
} }

View File

@ -50,7 +50,7 @@ static video::SMaterial baseMaterial()
static inline void disableTextureFiltering(video::SMaterial &mat) static inline void disableTextureFiltering(video::SMaterial &mat)
{ {
mat.forEachTexture([] (video::SMaterialLayer &tex) { mat.forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
tex.AnisotropicFilter = 0; tex.AnisotropicFilter = 0;

View File

@ -300,7 +300,7 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename,
// Enable bi/trilinear filtering only for high resolution textures // Enable bi/trilinear filtering only for high resolution textures
bool bilinear_filter = dim.Width > 32 && m_bilinear_filter; bool bilinear_filter = dim.Width > 32 && m_bilinear_filter;
bool trilinear_filter = dim.Width > 32 && m_trilinear_filter; bool trilinear_filter = dim.Width > 32 && m_trilinear_filter;
material.forEachTexture([=] (video::SMaterialLayer &tex) { material.forEachTexture([=] (auto &tex) {
tex.setFiltersMinetest(bilinear_filter, trilinear_filter, tex.setFiltersMinetest(bilinear_filter, trilinear_filter,
m_anisotropic_filter); m_anisotropic_filter);
}); });
@ -464,7 +464,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
material.MaterialType = m_material_type; material.MaterialType = m_material_type;
material.MaterialTypeParam = 0.5f; material.MaterialTypeParam = 0.5f;
material.BackfaceCulling = cull_backface; material.BackfaceCulling = cull_backface;
material.forEachTexture([this] (video::SMaterialLayer &tex) { material.forEachTexture([this] (auto &tex) {
tex.setFiltersMinetest(m_bilinear_filter, m_trilinear_filter, tex.setFiltersMinetest(m_bilinear_filter, m_trilinear_filter,
m_anisotropic_filter); m_anisotropic_filter);
}); });
@ -558,7 +558,7 @@ void WieldMeshSceneNode::changeToMesh(scene::IMesh *mesh)
m_meshnode->setMesh(mesh); m_meshnode->setMesh(mesh);
} }
m_meshnode->forEachMaterial([this] (video::SMaterial &mat) { m_meshnode->forEachMaterial([this] (auto &mat) {
mat.Lighting = m_lighting; mat.Lighting = m_lighting;
// need to normalize normals when lighting is enabled (because of setScale()) // need to normalize normals when lighting is enabled (because of setScale())
mat.NormalizeNormals = m_lighting; mat.NormalizeNormals = m_lighting;
@ -655,7 +655,7 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
video::SMaterial &material = buf->getMaterial(); video::SMaterial &material = buf->getMaterial();
material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
material.MaterialTypeParam = 0.5f; material.MaterialTypeParam = 0.5f;
material.forEachTexture([] (video::SMaterialLayer &tex) { material.forEachTexture([] (auto &tex) {
tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST;
}); });
@ -702,8 +702,10 @@ scene::SMesh *getExtrudedMesh(ITextureSource *tsrc,
video::SMaterial &material = mesh->getMeshBuffer(layer)->getMaterial(); video::SMaterial &material = mesh->getMeshBuffer(layer)->getMaterial();
material.TextureLayers[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; material.TextureLayers[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
material.TextureLayers[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; material.TextureLayers[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
material.TextureLayers[0].MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; material.forEachTexture([] (auto &tex) {
material.TextureLayers[0].MagFilter = video::ETMAGF_NEAREST; tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST;
tex.MagFilter = video::ETMAGF_NEAREST;
});
material.BackfaceCulling = true; material.BackfaceCulling = true;
material.Lighting = false; material.Lighting = false;
material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;