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

Reply via email to