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;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to