[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16302] branches/apricot/source/gameengine : Apricot Branch: bugfix, setting manual glsl shaders did not release

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Aug 29 16:13:26 CEST 2008


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);





More information about the Bf-blender-cvs mailing list