[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14683] trunk/blender/source/gameengine/ Ketsji: Fix BGE bug in patch #8724 (memory optimization): serious problem with alpha texture when Use Blender Material is active and several objects have same texture .

Benoit Bolsee benoit.bolsee at online.be
Sun May 4 23:14:39 CEST 2008


Revision: 14683
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14683
Author:   ben2610
Date:     2008-05-04 23:14:38 +0200 (Sun, 04 May 2008)

Log Message:
-----------
Fix BGE bug in patch #8724 (memory optimization): serious problem with alpha texture when Use Blender Material is active and several objects have same texture.  This bug messes up greatly with OpenGL texture. The GE is not usable without this fix.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h

Modified: trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp	2008-05-04 17:03:10 UTC (rev 14682)
+++ trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp	2008-05-04 21:14:38 UTC (rev 14683)
@@ -84,6 +84,7 @@
 	mScene(scene),
 	mUserDefBlend(0),
 	mModified(0),
+	mConstructed(false),
 	mPass(0)
 
 {
@@ -119,7 +120,9 @@
 KX_BlenderMaterial::~KX_BlenderMaterial()
 {
 	// cleanup work
-	OnExit();
+	if (mConstructed)
+		// clean only if material was actually used
+		OnExit();
 }
 
 
@@ -138,6 +141,10 @@
 
 void KX_BlenderMaterial::OnConstruction()
 {
+	if (mConstructed)
+		// when material are reused between objects
+		return;
+
 	// for each unique material...
 	int i;
 	for(i=0; i<mMaterial->num_enabled; i++) {
@@ -148,19 +155,20 @@
 			}
 			if(!mTextures[i].InitCubeMap(i, mMaterial->cubemap[i] ) )
 				spit("unable to initialize image("<<i<<") in "<< 
-						mMaterial->matname<< ", image will not be available");
+						 mMaterial->matname<< ", image will not be available");
 		} 
 	
 		else {
 			if( mMaterial->img[i] ) {
 				if( ! mTextures[i].InitFromImage(i, mMaterial->img[i], (mMaterial->flag[i] &MIPMAP)!=0 ))
 					spit("unable to initialize image("<<i<<") in "<< 
-						 mMaterial->matname<< ", image will not be available");
+						mMaterial->matname<< ", image will not be available");
 			}
 		}
 	}
 	mBlendFunc[0] =0;
 	mBlendFunc[1] =0;
+	mConstructed = true;
 }
 
 void KX_BlenderMaterial::OnExit()

Modified: trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h	2008-05-04 17:03:10 UTC (rev 14682)
+++ trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h	2008-05-04 21:14:38 UTC (rev 14683)
@@ -93,6 +93,7 @@
 	bool			mUserDefBlend;
 	unsigned int	mBlendFunc[2];
 	bool			mModified;
+	bool			mConstructed;			// if false, don't clean on exit
 
 	void ActivatGLMaterials( RAS_IRasterizer* rasty )const;
 	void ActivateTexGen( RAS_IRasterizer *ras ) const;





More information about the Bf-blender-cvs mailing list