Revision: 16302 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16302 Author: blendix Date: 2008-08-29 16:13:26 +0200 (Fri, 29 Aug 2008)
Log Message: ----------- Apricot Branch: bugfix, setting manual glsl shaders did not release displaylists, resulted in missing texture coordinates sometimes. Modified Paths: -------------- branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h Modified: branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp =================================================================== --- branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2008-08-29 13:23:33 UTC (rev 16301) +++ branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2008-08-29 14:13:26 UTC (rev 16302) @@ -19,6 +19,7 @@ #include "MT_Vector4.h" #include "MT_Matrix4x4.h" +#include "RAS_BucketManager.h" #include "RAS_MeshObject.h" #include "RAS_IRasterizer.h" #include "RAS_OpenGLRasterizer/RAS_GLExtensionManager.h" @@ -818,6 +819,7 @@ if(mShader && !mShader->GetError()) { m_flag &= ~RAS_BLENDERGLSL; mMaterial->SetSharedMaterial(true); + mScene->GetBucketManager()->ReleaseDisplayLists(this); Py_INCREF(mShader); return mShader; }else Modified: branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp =================================================================== --- branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp 2008-08-29 13:23:33 UTC (rev 16301) +++ branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp 2008-08-29 14:13:26 UTC (rev 16302) @@ -249,25 +249,29 @@ (*bit)->Optimize(distance); } -void RAS_BucketManager::ReleaseDisplayLists() +void RAS_BucketManager::ReleaseDisplayLists(RAS_IPolyMaterial *mat) { BucketList::iterator bit; list<RAS_MeshSlot>::iterator mit; for (bit = m_SolidBuckets.begin(); bit != m_SolidBuckets.end(); ++bit) { - for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) { - if(mit->m_DisplayList) { - mit->m_DisplayList->Release(); - mit->m_DisplayList = NULL; + if (mat == NULL || (mat == (*bit)->GetPolyMaterial())) { + for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) { + if(mit->m_DisplayList) { + mit->m_DisplayList->Release(); + mit->m_DisplayList = NULL; + } } } } for (bit = m_AlphaBuckets.begin(); bit != m_AlphaBuckets.end(); ++bit) { - for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) { - if(mit->m_DisplayList) { - mit->m_DisplayList->Release(); - mit->m_DisplayList = NULL; + if (mat == NULL || (mat == (*bit)->GetPolyMaterial())) { + for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) { + if(mit->m_DisplayList) { + mit->m_DisplayList->Release(); + mit->m_DisplayList = NULL; + } } } } Modified: branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h =================================================================== --- branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h 2008-08-29 13:23:33 UTC (rev 16301) +++ branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h 2008-08-29 14:13:26 UTC (rev 16302) @@ -57,7 +57,7 @@ RAS_MaterialBucket* FindBucket(RAS_IPolyMaterial * material, bool &bucketCreated); void OptimizeBuckets(MT_Scalar distance); - void ReleaseDisplayLists(); + void ReleaseDisplayLists(RAS_IPolyMaterial * material = NULL); private: void OrderBuckets(const MT_Transform& cameratrans, BucketList& buckets, vector<sortedmeshslot>& slots, bool alpha); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs