[Bf-blender-cvs] [89c61b2] master: BGE Cleanup: Reducing KX_BlenderSceneConverter's dependence on Bullet.

Mitchell Stokes noreply at git.blender.org
Thu Apr 24 03:41:23 CEST 2014


Commit: 89c61b20f019766fa57835b3548c4f84d36f6214
Author: Mitchell Stokes
Date:   Wed Apr 23 17:53:25 2014 -0700
https://developer.blender.org/rB89c61b20f019766fa57835b3548c4f84d36f6214

BGE Cleanup: Reducing KX_BlenderSceneConverter's dependence on Bullet.

  * Moving the BlenderDebugDraw (derived from btIDebugDraw) from
    KX_BlenderSceneConverter to CcdPhysicsEnvironment
  * Moving CcdPhysicsEnvironment initialization to CcdPhysicsEnvironment
    (this could probably be cleaned up some more with some sort of
    factory, or at least moving code to CcdPhysicsEnvironment's
    constructor)
  * Simplifying physics environment initialization (went from two
    switches to one)

===================================================================

M	source/gameengine/Converter/KX_BlenderSceneConverter.cpp
M	source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
M	source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h

===================================================================

diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 6b7a53c..1df5184 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -246,60 +246,6 @@ Scene *KX_BlenderSceneConverter::GetBlenderSceneForName(const STR_String& name)
 
 }
 
-#ifdef WITH_BULLET
-
-#include "LinearMath/btIDebugDraw.h"
-
-
-struct	BlenderDebugDraw : public btIDebugDraw
-{
-	BlenderDebugDraw () :
-		m_debugMode(0) 
-	{
-	}
-	
-	int m_debugMode;
-
-	virtual void	drawLine(const btVector3& from,const btVector3& to,const btVector3& color)
-	{
-		if (m_debugMode >0)
-		{
-			MT_Vector3 kxfrom(from[0],from[1],from[2]);
-			MT_Vector3 kxto(to[0],to[1],to[2]);
-			MT_Vector3 kxcolor(color[0],color[1],color[2]);
-
-			KX_RasterizerDrawDebugLine(kxfrom,kxto,kxcolor);
-		}
-	}
-	
-	virtual void	reportErrorWarning(const char* warningString)
-	{
-
-	}
-
-	virtual void	drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,float distance,int lifeTime,const btVector3& color)
-	{
-		//not yet
-	}
-
-	virtual void	setDebugMode(int debugMode)
-	{
-		m_debugMode = debugMode;
-	}
-	virtual int		getDebugMode() const
-	{
-		return m_debugMode;
-	}
-	///todo: find out if Blender can do this
-	virtual void	draw3dText(const btVector3& location,const char* textString)
-	{
-
-	}
-		
-};
-
-#endif
-
 void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene,
 											class RAS_IRasterizer* rendertools,
 											class RAS_ICanvas* canvas,
@@ -308,8 +254,9 @@ void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene,
 	//find out which physics engine
 	Scene *blenderscene = destinationscene->GetBlenderScene();
 
+	PHY_IPhysicsEnvironment *phy_env = NULL;
+
 	e_PhysicsEngine physics_engine = UseBullet;
-	bool useDbvtCulling = false;
 	// hook for registration function during conversion.
 	m_currentScene = destinationscene;
 	destinationscene->SetSceneConverter(this);
@@ -318,56 +265,31 @@ void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene,
 	// when doing threaded conversion, so it's disabled for now.
 	// SG_SetActiveStage(SG_STAGE_CONVERTER);
 
-	if (blenderscene)
+	switch (blenderscene->gm.physicsEngine)
 	{
-	
-		switch (blenderscene->gm.physicsEngine)
+#ifdef WITH_BULLET
+	case WOPHY_BULLET:
 		{
-		case WOPHY_BULLET:
-			{
-				physics_engine = UseBullet;
-				useDbvtCulling = (blenderscene->gm.mode & WO_DBVT_CULLING) != 0;
-				break;
-			}
-			default:
-			case WOPHY_NONE:
-			{
-				physics_engine = UseNone;
-				break;
-			}
-		}
-	}
+			SYS_SystemHandle syshandle = SYS_GetSystem(); /*unused*/
+			int visualizePhysics = SYS_GetCommandLineInt(syshandle,"show_physics",0);
 
-	switch (physics_engine)
-	{
-#ifdef WITH_BULLET
-		case UseBullet:
-			{
-				CcdPhysicsEnvironment* ccdPhysEnv = new CcdPhysicsEnvironment(useDbvtCulling);
-				ccdPhysEnv->SetDebugDrawer(new BlenderDebugDraw());
-				ccdPhysEnv->SetDeactivationLinearTreshold(blenderscene->gm.lineardeactthreshold);
-				ccdPhysEnv->SetDeactivationAngularTreshold(blenderscene->gm.angulardeactthreshold);
-				ccdPhysEnv->SetDeactivationTime(blenderscene->gm.deactivationtime);
-
-				SYS_SystemHandle syshandle = SYS_GetSystem(); /*unused*/
-				int visualizePhysics = SYS_GetCommandLineInt(syshandle,"show_physics",0);
-				if (visualizePhysics)
-					ccdPhysEnv->SetDebugMode(btIDebugDraw::DBG_DrawWireframe|btIDebugDraw::DBG_DrawAabb|btIDebugDraw::DBG_DrawContactPoints|btIDebugDraw::DBG_DrawText|btIDebugDraw::DBG_DrawConstraintLimits|btIDebugDraw::DBG_DrawConstraints);
-		
-				//todo: get a button in blender ?
-				//disable / enable debug drawing (contact points, aabb's etc)
-				//ccdPhysEnv->setDebugMode(1);
-				destinationscene->SetPhysicsEnvironment(ccdPhysEnv);
-				break;
-			}
+			phy_env = CcdPhysicsEnvironment::Create(blenderscene, visualizePhysics);
+			physics_engine = UseBullet;
+			break;
+		}
 #endif
-		default:
-		case UseNone:
+	default:
+	case WOPHY_NONE:
+		{
+			// We should probably use some sort of factory here
+			phy_env = new DummyPhysicsEnvironment();
 			physics_engine = UseNone;
-			destinationscene ->SetPhysicsEnvironment(new DummyPhysicsEnvironment());
 			break;
+		}
 	}
 
+	destinationscene->SetPhysicsEnvironment(phy_env);
+
 	BL_ConvertBlenderObjects(m_maggie,
 		destinationscene,
 		m_ketsjiEngine,
@@ -389,12 +311,6 @@ void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene,
 	//This cache mecanism is buggy so I leave it disable and the memory leak
 	//that would result from this is fixed in RemoveScene()
 	m_map_mesh_to_gamemesh.clear();
-
-#ifndef WITH_BULLET
-	/* quiet compiler warning */
-	(void)useDbvtCulling;
-#endif
-
 }
 
 // This function removes all entities stored in the converter for that scene
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index dcd30ea..4a9fd6a 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -40,10 +40,14 @@ subject to the following restrictions:
 #include "PHY_IMotionState.h"
 #include "PHY_ICharacter.h"
 #include "KX_GameObject.h"
+#include "KX_PythonInit.h" // for KX_RasterizerDrawDebugLine
 #include "RAS_MeshObject.h"
 #include "RAS_Polygon.h"
 #include "RAS_TexVert.h"
 
+#include "DNA_scene_types.h"
+#include "DNA_world_types.h"
+
 #define CCD_CONSTRAINT_DISABLE_LINKED_COLLISION 0x80
 
 #ifdef NEW_BULLET_VEHICLE_SUPPORT
@@ -2895,3 +2899,63 @@ void	CcdPhysicsEnvironment::ExportFile(const char* filename)
 	}
 }
 
+struct	BlenderDebugDraw : public btIDebugDraw
+{
+	BlenderDebugDraw () :
+		m_debugMode(0)
+	{
+	}
+
+	int m_debugMode;
+
+	virtual void	drawLine(const btVector3& from,const btVector3& to,const btVector3& color)
+	{
+		if (m_debugMode >0)
+		{
+			MT_Vector3 kxfrom(from[0],from[1],from[2]);
+			MT_Vector3 kxto(to[0],to[1],to[2]);
+			MT_Vector3 kxcolor(color[0],color[1],color[2]);
+
+			KX_RasterizerDrawDebugLine(kxfrom,kxto,kxcolor);
+		}
+	}
+
+	virtual void	reportErrorWarning(const char* warningString)
+	{
+
+	}
+
+	virtual void	drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,float distance,int lifeTime,const btVector3& color)
+	{
+		//not yet
+	}
+
+	virtual void	setDebugMode(int debugMode)
+	{
+		m_debugMode = debugMode;
+	}
+	virtual int		getDebugMode() const
+	{
+		return m_debugMode;
+	}
+	///todo: find out if Blender can do this
+	virtual void	draw3dText(const btVector3& location,const char* textString)
+	{
+
+	}
+
+};
+
+CcdPhysicsEnvironment *CcdPhysicsEnvironment::Create(Scene *blenderscene, bool visualizePhysics)
+{
+	CcdPhysicsEnvironment* ccdPhysEnv = new CcdPhysicsEnvironment((blenderscene->gm.mode & WO_DBVT_CULLING) != 0);
+	ccdPhysEnv->SetDebugDrawer(new BlenderDebugDraw());
+	ccdPhysEnv->SetDeactivationLinearTreshold(blenderscene->gm.lineardeactthreshold);
+	ccdPhysEnv->SetDeactivationAngularTreshold(blenderscene->gm.angulardeactthreshold);
+	ccdPhysEnv->SetDeactivationTime(blenderscene->gm.deactivationtime);
+
+	if (visualizePhysics)
+		ccdPhysEnv->SetDebugMode(btIDebugDraw::DBG_DrawWireframe|btIDebugDraw::DBG_DrawAabb|btIDebugDraw::DBG_DrawContactPoints|btIDebugDraw::DBG_DrawText|btIDebugDraw::DBG_DrawConstraintLimits|btIDebugDraw::DBG_DrawConstraints);
+
+	return ccdPhysEnv;
+}
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
index 4e002f5..8b8e3f1 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
@@ -260,6 +260,8 @@ protected:
 
 		void MergeEnvironment(PHY_IPhysicsEnvironment *other_env);
 
+		static CcdPhysicsEnvironment *Create(struct Scene *blenderscene, bool visualizePhysics);
+
 	protected:




More information about the Bf-blender-cvs mailing list