From 6577d770fbdf5cb6cc3cc10bc3b0792a66dad7fc Mon Sep 17 00:00:00 2001 From: auria Date: Tue, 23 Feb 2010 00:09:09 +0000 Subject: [PATCH] My latest (failed) attempt at fixing MrIceBlock : allow setting material settings for untextured surfaces too. Committing because we might eventually see an interest in this git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@4809 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/graphics/irr_driver.cpp | 6 ++++-- src/graphics/material_manager.cpp | 23 +++++++++++++++++++++++ src/graphics/material_manager.hpp | 3 +++ src/tracks/track.cpp | 3 ++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index 0ad7e490c..70aef339b 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -392,6 +392,7 @@ scene::IMesh *IrrDriver::getMesh(const std::string &filename) scene::IAnimatedMesh *m = m_scene_manager->getMesh(filename.c_str()); if(!m) return NULL; setAllMaterialFlags(m); + return m->getMesh(0); } // getMesh @@ -410,8 +411,9 @@ void IrrDriver::setAllMaterialFlags(scene::IAnimatedMesh *mesh) const for(unsigned int j=0; jsetAllMaterialFlags(t, mb); + if (!t) material_manager->setAllFlatMaterialFlags(mb); + else material_manager->setAllMaterialFlags(t, mb); + } // for jsetAllUntexturedMaterialFlags(mb); } // for igetMaterial(); + + //printf("=== I've got a flat material here! (%i, %i, %i) ==\n", + // material.AmbientColor.getRed(), material.AmbientColor.getGreen(), material.AmbientColor.getBlue()); + if (material.AmbientColor.getAlpha() < 255) + { + //printf("---> AND IT's TRANSLUSCENT!!\n"); + + //m->MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + material.MaterialType = video::EMT_SOLID; + material.ZWriteEnable = false; + material.setFlag(video::EMF_ZWRITE_ENABLE, false); + //material.setFlag(video::EMF_BACK_FACE_CULLING, false); + //material.Wireframe=true; + } + + material.Shininess = 0.6f; +} + //----------------------------------------------------------------------------- /** Searches for the material in the given texture, and calls a function * in the material to set the irrlicht material flags. diff --git a/src/graphics/material_manager.hpp b/src/graphics/material_manager.hpp index 19a327f71..6ef8fed94 100644 --- a/src/graphics/material_manager.hpp +++ b/src/graphics/material_manager.hpp @@ -43,7 +43,10 @@ public: void reInit (); void setAllMaterialFlags(video::ITexture* t, scene::IMeshBuffer *mb) const; + void setAllUntexturedMaterialFlags(scene::IMeshBuffer *mb) const; + void setAllFlatMaterialFlags(scene::IMeshBuffer *mb) const; + int addEntity (Material *m); Material *getMaterial (const std::string& t, bool is_full_path=false, bool make_permanent=false); diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 3ba69e210..6ca89ff59 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -420,7 +420,8 @@ bool Track::loadMainTrack(const XMLNode &root) } m_all_meshes.push_back(mesh); - scene::ISceneNode *scene_node = irr_driver->addMesh(mesh); + //scene::ISceneNode *scene_node = irr_driver->addMesh(mesh); + scene::ISceneNode *scene_node = irr_driver->addOctTree(mesh); mesh->setHardwareMappingHint(scene::EHM_STATIC); core::vector3df xyz(0,0,0); track_node->getXYZ(&xyz);