forked from bartvdbraak/blender
BGE memleak fixed: mesh/material not deleted when switching scene
This commit is contained in:
parent
ce7a21047f
commit
822e51bd2d
@ -123,29 +123,29 @@ KX_BlenderSceneConverter::~KX_BlenderSceneConverter()
|
|||||||
delete (ipoList);
|
delete (ipoList);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<KX_WorldInfo*>::iterator itw = m_worldinfos.begin();
|
vector<pair<KX_Scene*,KX_WorldInfo*> >::iterator itw = m_worldinfos.begin();
|
||||||
while (itw != m_worldinfos.end()) {
|
while (itw != m_worldinfos.end()) {
|
||||||
delete (*itw);
|
delete (*itw).second;
|
||||||
itw++;
|
itw++;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<RAS_IPolyMaterial*>::iterator itp = m_polymaterials.begin();
|
vector<pair<KX_Scene*,RAS_IPolyMaterial*> >::iterator itp = m_polymaterials.begin();
|
||||||
while (itp != m_polymaterials.end()) {
|
while (itp != m_polymaterials.end()) {
|
||||||
delete (*itp);
|
delete (*itp).second;
|
||||||
itp++;
|
itp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete after RAS_IPolyMaterial
|
// delete after RAS_IPolyMaterial
|
||||||
vector<BL_Material *>::iterator itmat = m_materials.begin();
|
vector<pair<KX_Scene*,BL_Material *> >::iterator itmat = m_materials.begin();
|
||||||
while (itmat != m_materials.end()) {
|
while (itmat != m_materials.end()) {
|
||||||
delete (*itmat);
|
delete (*itmat).second;
|
||||||
itmat++;
|
itmat++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vector<RAS_MeshObject*>::iterator itm = m_meshobjects.begin();
|
vector<pair<KX_Scene*,RAS_MeshObject*> >::iterator itm = m_meshobjects.begin();
|
||||||
while (itm != m_meshobjects.end()) {
|
while (itm != m_meshobjects.end()) {
|
||||||
delete (*itm);
|
delete (*itm).second;
|
||||||
itm++;
|
itm++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,6 +263,9 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
|
|||||||
Scene *blenderscene = GetSceneForName2(m_maggie, scenename);
|
Scene *blenderscene = GetSceneForName2(m_maggie, scenename);
|
||||||
|
|
||||||
e_PhysicsEngine physics_engine = UseBullet;
|
e_PhysicsEngine physics_engine = UseBullet;
|
||||||
|
// hook for registration function during conversion.
|
||||||
|
m_currentScene = destinationscene;
|
||||||
|
destinationscene->SetSceneConverter(this);
|
||||||
|
|
||||||
if (blenderscene)
|
if (blenderscene)
|
||||||
{
|
{
|
||||||
@ -360,16 +363,90 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
|
|||||||
m_alwaysUseExpandFraming
|
m_alwaysUseExpandFraming
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//These lookup are not needed during game
|
||||||
m_map_blender_to_gameactuator.clear();
|
m_map_blender_to_gameactuator.clear();
|
||||||
m_map_blender_to_gamecontroller.clear();
|
m_map_blender_to_gamecontroller.clear();
|
||||||
|
|
||||||
m_map_blender_to_gameobject.clear();
|
m_map_blender_to_gameobject.clear();
|
||||||
m_map_mesh_to_gamemesh.clear();
|
|
||||||
|
|
||||||
//don't clear it yet, it is needed for the baking physics into ipo animation
|
//Clearing this lookup table has the effect of disabling the cache of meshes
|
||||||
|
//between scenes, even if they are shared in the blend file.
|
||||||
|
//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();
|
||||||
|
//Don't clear this lookup, it is needed for the baking physics into ipo animation
|
||||||
|
//To avoid it's infinite grows, object will be unregister when they are deleted
|
||||||
|
//see KX_Scene::NewRemoveObject
|
||||||
//m_map_gameobject_to_blender.clear();
|
//m_map_gameobject_to_blender.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This function removes all entities stored in the converter for that scene
|
||||||
|
// It should be used instead of direct delete scene
|
||||||
|
// Note that there was some provision for sharing entities (meshes...) between
|
||||||
|
// scenes but that is now disabled so all scene will have their own copy
|
||||||
|
// and we can delete them here. If the sharing is reactivated, change this code too..
|
||||||
|
// (see KX_BlenderSceneConverter::ConvertScene)
|
||||||
|
void KX_BlenderSceneConverter::RemoveScene(KX_Scene *scene)
|
||||||
|
{
|
||||||
|
int i, size;
|
||||||
|
// delete the scene first as it will stop the use of entities
|
||||||
|
delete scene;
|
||||||
|
// delete the entities of this scene
|
||||||
|
vector<pair<KX_Scene*,KX_WorldInfo*> >::iterator worldit;
|
||||||
|
size = m_worldinfos.size();
|
||||||
|
for (i=0, worldit=m_worldinfos.begin(); i<size; ) {
|
||||||
|
if ((*worldit).first == scene) {
|
||||||
|
delete (*worldit).second;
|
||||||
|
*worldit = m_worldinfos.back();
|
||||||
|
m_worldinfos.pop_back();
|
||||||
|
size--;
|
||||||
|
} else {
|
||||||
|
i++;
|
||||||
|
worldit++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<pair<KX_Scene*,RAS_IPolyMaterial*> >::iterator polymit;
|
||||||
|
size = m_polymaterials.size();
|
||||||
|
for (i=0, polymit=m_polymaterials.begin(); i<size; ) {
|
||||||
|
if ((*polymit).first == scene) {
|
||||||
|
delete (*polymit).second;
|
||||||
|
*polymit = m_polymaterials.back();
|
||||||
|
m_polymaterials.pop_back();
|
||||||
|
size--;
|
||||||
|
} else {
|
||||||
|
i++;
|
||||||
|
polymit++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<pair<KX_Scene*,BL_Material*> >::iterator matit;
|
||||||
|
size = m_materials.size();
|
||||||
|
for (i=0, matit=m_materials.begin(); i<size; ) {
|
||||||
|
if ((*matit).first == scene) {
|
||||||
|
delete (*matit).second;
|
||||||
|
*matit = m_materials.back();
|
||||||
|
m_materials.pop_back();
|
||||||
|
size--;
|
||||||
|
} else {
|
||||||
|
i++;
|
||||||
|
matit++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<pair<KX_Scene*,RAS_MeshObject*> >::iterator meshit;
|
||||||
|
size = m_meshobjects.size();
|
||||||
|
for (i=0, meshit=m_meshobjects.begin(); i<size; ) {
|
||||||
|
if ((*meshit).first == scene) {
|
||||||
|
delete (*meshit).second;
|
||||||
|
*meshit = m_meshobjects.back();
|
||||||
|
m_meshobjects.pop_back();
|
||||||
|
size--;
|
||||||
|
} else {
|
||||||
|
i++;
|
||||||
|
meshit++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// use blender materials
|
// use blender materials
|
||||||
void KX_BlenderSceneConverter::SetMaterials(bool val)
|
void KX_BlenderSceneConverter::SetMaterials(bool val)
|
||||||
@ -385,7 +462,7 @@ bool KX_BlenderSceneConverter::GetMaterials()
|
|||||||
|
|
||||||
void KX_BlenderSceneConverter::RegisterBlenderMaterial(BL_Material *mat)
|
void KX_BlenderSceneConverter::RegisterBlenderMaterial(BL_Material *mat)
|
||||||
{
|
{
|
||||||
m_materials.push_back(mat);
|
m_materials.push_back(pair<KX_Scene*,BL_Material *>(m_currentScene,mat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -406,6 +483,11 @@ void KX_BlenderSceneConverter::RegisterGameObject(
|
|||||||
m_map_blender_to_gameobject.insert(CHashedPtr(for_blenderobject),gameobject);
|
m_map_blender_to_gameobject.insert(CHashedPtr(for_blenderobject),gameobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KX_BlenderSceneConverter::UnregisterGameObject(
|
||||||
|
KX_GameObject *gameobject)
|
||||||
|
{
|
||||||
|
m_map_gameobject_to_blender.remove(CHashedPtr(gameobject));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
KX_GameObject *KX_BlenderSceneConverter::FindGameObject(
|
KX_GameObject *KX_BlenderSceneConverter::FindGameObject(
|
||||||
@ -433,7 +515,7 @@ void KX_BlenderSceneConverter::RegisterGameMesh(
|
|||||||
struct Mesh *for_blendermesh)
|
struct Mesh *for_blendermesh)
|
||||||
{
|
{
|
||||||
m_map_mesh_to_gamemesh.insert(CHashedPtr(for_blendermesh),gamemesh);
|
m_map_mesh_to_gamemesh.insert(CHashedPtr(for_blendermesh),gamemesh);
|
||||||
m_meshobjects.push_back(gamemesh);
|
m_meshobjects.push_back(pair<KX_Scene*,RAS_MeshObject*>(m_currentScene,gamemesh));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -458,7 +540,7 @@ RAS_MeshObject *KX_BlenderSceneConverter::FindGameMesh(
|
|||||||
|
|
||||||
void KX_BlenderSceneConverter::RegisterPolyMaterial(RAS_IPolyMaterial *polymat)
|
void KX_BlenderSceneConverter::RegisterPolyMaterial(RAS_IPolyMaterial *polymat)
|
||||||
{
|
{
|
||||||
m_polymaterials.push_back(polymat);
|
m_polymaterials.push_back(pair<KX_Scene*,RAS_IPolyMaterial*>(m_currentScene,polymat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -523,7 +605,7 @@ SCA_IController *KX_BlenderSceneConverter::FindGameController(
|
|||||||
void KX_BlenderSceneConverter::RegisterWorldInfo(
|
void KX_BlenderSceneConverter::RegisterWorldInfo(
|
||||||
KX_WorldInfo *worldinfo)
|
KX_WorldInfo *worldinfo)
|
||||||
{
|
{
|
||||||
m_worldinfos.push_back(worldinfo);
|
m_worldinfos.push_back(pair<KX_Scene*,KX_WorldInfo*>(m_currentScene,worldinfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -51,10 +51,13 @@ struct SpaceIpo;
|
|||||||
|
|
||||||
class KX_BlenderSceneConverter : public KX_ISceneConverter
|
class KX_BlenderSceneConverter : public KX_ISceneConverter
|
||||||
{
|
{
|
||||||
vector<KX_WorldInfo*> m_worldinfos;
|
// Use vector of pairs to allow removal of entities between scene switch
|
||||||
vector<RAS_IPolyMaterial*> m_polymaterials;
|
vector<pair<KX_Scene*,KX_WorldInfo*> > m_worldinfos;
|
||||||
vector<RAS_MeshObject*> m_meshobjects;
|
vector<pair<KX_Scene*,RAS_IPolyMaterial*> > m_polymaterials;
|
||||||
vector<BL_Material *> m_materials;
|
vector<pair<KX_Scene*,RAS_MeshObject*> > m_meshobjects;
|
||||||
|
vector<pair<KX_Scene*,BL_Material *> > m_materials;
|
||||||
|
// Should also have a list of collision shapes.
|
||||||
|
// For the time being this is held in KX_Scene::m_shapes
|
||||||
|
|
||||||
GEN_Map<CHashedPtr,struct Object*> m_map_gameobject_to_blender;
|
GEN_Map<CHashedPtr,struct Object*> m_map_gameobject_to_blender;
|
||||||
GEN_Map<CHashedPtr,KX_GameObject*> m_map_blender_to_gameobject;
|
GEN_Map<CHashedPtr,KX_GameObject*> m_map_blender_to_gameobject;
|
||||||
@ -72,6 +75,7 @@ class KX_BlenderSceneConverter : public KX_ISceneConverter
|
|||||||
|
|
||||||
STR_String m_newfilename;
|
STR_String m_newfilename;
|
||||||
class KX_KetsjiEngine* m_ketsjiEngine;
|
class KX_KetsjiEngine* m_ketsjiEngine;
|
||||||
|
class KX_Scene* m_currentScene; // Scene being converted
|
||||||
bool m_alwaysUseExpandFraming;
|
bool m_alwaysUseExpandFraming;
|
||||||
bool m_usemat;
|
bool m_usemat;
|
||||||
|
|
||||||
@ -99,6 +103,7 @@ public:
|
|||||||
class RAS_IRenderTools* rendertools,
|
class RAS_IRenderTools* rendertools,
|
||||||
class RAS_ICanvas* canvas
|
class RAS_ICanvas* canvas
|
||||||
);
|
);
|
||||||
|
virtual void RemoveScene(class KX_Scene *scene);
|
||||||
|
|
||||||
void SetNewFileName(const STR_String& filename);
|
void SetNewFileName(const STR_String& filename);
|
||||||
bool TryAndLoadNewFile();
|
bool TryAndLoadNewFile();
|
||||||
@ -106,6 +111,7 @@ public:
|
|||||||
void SetAlwaysUseExpandFraming(bool to_what);
|
void SetAlwaysUseExpandFraming(bool to_what);
|
||||||
|
|
||||||
void RegisterGameObject(KX_GameObject *gameobject, struct Object *for_blenderobject);
|
void RegisterGameObject(KX_GameObject *gameobject, struct Object *for_blenderobject);
|
||||||
|
void UnregisterGameObject(KX_GameObject *gameobject);
|
||||||
KX_GameObject *FindGameObject(struct Object *for_blenderobject);
|
KX_GameObject *FindGameObject(struct Object *for_blenderobject);
|
||||||
struct Object *FindBlenderObject(KX_GameObject *for_gameobject);
|
struct Object *FindBlenderObject(KX_GameObject *for_gameobject);
|
||||||
|
|
||||||
|
@ -682,8 +682,6 @@ void KX_ConvertODEEngineObject(KX_GameObject* gameobj,
|
|||||||
#endif //WIN32
|
#endif //WIN32
|
||||||
|
|
||||||
|
|
||||||
static GEN_Map<GEN_HashedPtr,btCollisionShape*> map_gamemesh_to_bulletshape;
|
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
static btCollisionShape* CreateBulletShapeFromMesh(RAS_MeshObject* meshobj, bool polytope)
|
static btCollisionShape* CreateBulletShapeFromMesh(RAS_MeshObject* meshobj, bool polytope)
|
||||||
{
|
{
|
||||||
@ -701,14 +699,6 @@ static btCollisionShape* CreateBulletShapeFromMesh(RAS_MeshObject* meshobj, bool
|
|||||||
int numPoints = 0;
|
int numPoints = 0;
|
||||||
btVector3* points = 0;
|
btVector3* points = 0;
|
||||||
|
|
||||||
btCollisionShape** shapeptr = map_gamemesh_to_bulletshape[GEN_HashedPtr(meshobj)];
|
|
||||||
|
|
||||||
// Mesh has already been converted: reuse
|
|
||||||
if (shapeptr)
|
|
||||||
{
|
|
||||||
//return *shapeptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mesh has no polygons!
|
// Mesh has no polygons!
|
||||||
int numpolys = meshobj->NumPolygons();
|
int numpolys = meshobj->NumPolygons();
|
||||||
if (!numpolys)
|
if (!numpolys)
|
||||||
@ -850,7 +840,6 @@ static btCollisionShape* CreateBulletShapeFromMesh(RAS_MeshObject* meshobj, bool
|
|||||||
if (numvalidpolys > 0)
|
if (numvalidpolys > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
//map_gamemesh_to_bulletshape.insert(GEN_HashedPtr(meshobj),collisionMeshShape);
|
|
||||||
if (!polytope)
|
if (!polytope)
|
||||||
{
|
{
|
||||||
bool useQuantization = true;
|
bool useQuantization = true;
|
||||||
@ -1200,17 +1189,6 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
|
|||||||
|
|
||||||
void KX_ClearBulletSharedShapes()
|
void KX_ClearBulletSharedShapes()
|
||||||
{
|
{
|
||||||
int numshapes = map_gamemesh_to_bulletshape.size();
|
|
||||||
int i;
|
|
||||||
btCollisionShape*shape=0;
|
|
||||||
for (i=0;i<numshapes ;i++)
|
|
||||||
{
|
|
||||||
shape = *map_gamemesh_to_bulletshape.at(i);
|
|
||||||
//delete shape;
|
|
||||||
}
|
|
||||||
|
|
||||||
map_gamemesh_to_bulletshape.clear();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,6 +55,8 @@ public:
|
|||||||
class RAS_IRenderTools* rendertools,
|
class RAS_IRenderTools* rendertools,
|
||||||
class RAS_ICanvas* canvas)=0;
|
class RAS_ICanvas* canvas)=0;
|
||||||
|
|
||||||
|
virtual void RemoveScene(class KX_Scene *scene)=0;
|
||||||
|
|
||||||
virtual void SetAlwaysUseExpandFraming(bool to_what) = 0;
|
virtual void SetAlwaysUseExpandFraming(bool to_what) = 0;
|
||||||
|
|
||||||
virtual void SetNewFileName(const STR_String& filename) = 0;
|
virtual void SetNewFileName(const STR_String& filename) = 0;
|
||||||
|
@ -993,7 +993,7 @@ void KX_KetsjiEngine::StopEngine()
|
|||||||
for (sceneit = m_scenes.begin();sceneit != m_scenes.end() ; sceneit++)
|
for (sceneit = m_scenes.begin();sceneit != m_scenes.end() ; sceneit++)
|
||||||
{
|
{
|
||||||
KX_Scene* scene = *sceneit;
|
KX_Scene* scene = *sceneit;
|
||||||
delete scene;
|
m_sceneconverter->RemoveScene(scene);
|
||||||
}
|
}
|
||||||
m_scenes.clear();
|
m_scenes.clear();
|
||||||
|
|
||||||
@ -1217,7 +1217,7 @@ void KX_KetsjiEngine::RemoveScheduledScenes()
|
|||||||
KX_Scene* scene = *sceneit;
|
KX_Scene* scene = *sceneit;
|
||||||
if (scene->GetName()==scenename)
|
if (scene->GetName()==scenename)
|
||||||
{
|
{
|
||||||
delete scene;
|
m_sceneconverter->RemoveScene(scene);
|
||||||
m_scenes.erase(sceneit);
|
m_scenes.erase(sceneit);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1315,7 +1315,7 @@ void KX_KetsjiEngine::ReplaceScheduledScenes()
|
|||||||
KX_Scene* scene = *sceneit;
|
KX_Scene* scene = *sceneit;
|
||||||
if (scene->GetName() == oldscenename)
|
if (scene->GetName() == oldscenename)
|
||||||
{
|
{
|
||||||
delete scene;
|
m_sceneconverter->RemoveScene(scene);
|
||||||
KX_Scene* tmpscene = CreateScene(newscenename);
|
KX_Scene* tmpscene = CreateScene(newscenename);
|
||||||
m_scenes[i]=tmpscene;
|
m_scenes[i]=tmpscene;
|
||||||
PostProcessScene(tmpscene);
|
PostProcessScene(tmpscene);
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#include "NG_NetworkScene.h"
|
#include "NG_NetworkScene.h"
|
||||||
#include "PHY_IPhysicsEnvironment.h"
|
#include "PHY_IPhysicsEnvironment.h"
|
||||||
#include "KX_IPhysicsController.h"
|
#include "KX_IPhysicsController.h"
|
||||||
|
#include "KX_BlenderSceneConverter.h"
|
||||||
|
|
||||||
#include "BL_SkinDeformer.h"
|
#include "BL_SkinDeformer.h"
|
||||||
#include "BL_DeformableGameObject.h"
|
#include "BL_DeformableGameObject.h"
|
||||||
@ -120,7 +121,8 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
|
|||||||
m_adi(adi),
|
m_adi(adi),
|
||||||
m_networkDeviceInterface(ndi),
|
m_networkDeviceInterface(ndi),
|
||||||
m_active_camera(NULL),
|
m_active_camera(NULL),
|
||||||
m_ueberExecutionPriority(0)
|
m_ueberExecutionPriority(0),
|
||||||
|
m_sceneConverter(NULL)
|
||||||
{
|
{
|
||||||
m_suspendedtime = 0.0;
|
m_suspendedtime = 0.0;
|
||||||
m_suspendeddelta = 0.0;
|
m_suspendeddelta = 0.0;
|
||||||
@ -783,6 +785,8 @@ void KX_Scene::NewRemoveObject(class CValue* gameobj)
|
|||||||
//m_active_camera->Release();
|
//m_active_camera->Release();
|
||||||
m_active_camera = NULL;
|
m_active_camera = NULL;
|
||||||
}
|
}
|
||||||
|
if (m_sceneConverter)
|
||||||
|
m_sceneConverter->UnregisterGameObject(newobj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1277,6 +1281,11 @@ void KX_Scene::SetNodeTree(SG_Tree* root)
|
|||||||
m_objecttree = root;
|
m_objecttree = root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KX_Scene::SetSceneConverter(class KX_BlenderSceneConverter* sceneConverter)
|
||||||
|
{
|
||||||
|
m_sceneConverter = sceneConverter;
|
||||||
|
}
|
||||||
|
|
||||||
void KX_Scene::SetPhysicsEnvironment(class PHY_IPhysicsEnvironment* physEnv)
|
void KX_Scene::SetPhysicsEnvironment(class PHY_IPhysicsEnvironment* physEnv)
|
||||||
{
|
{
|
||||||
m_physicsEnvironment = physEnv;
|
m_physicsEnvironment = physEnv;
|
||||||
|
@ -86,6 +86,7 @@ class RAS_IRasterizer;
|
|||||||
class RAS_IRenderTools;
|
class RAS_IRenderTools;
|
||||||
class SCA_JoystickManager;
|
class SCA_JoystickManager;
|
||||||
class btCollisionShape;
|
class btCollisionShape;
|
||||||
|
class KX_BlenderSceneConverter;
|
||||||
/**
|
/**
|
||||||
* The KX_Scene holds all data for an independent scene. It relates
|
* The KX_Scene holds all data for an independent scene. It relates
|
||||||
* KX_Objects to the specific objects in the modules.
|
* KX_Objects to the specific objects in the modules.
|
||||||
@ -136,10 +137,12 @@ protected:
|
|||||||
SCA_MouseManager* m_mousemgr;
|
SCA_MouseManager* m_mousemgr;
|
||||||
SCA_TimeEventManager* m_timemgr;
|
SCA_TimeEventManager* m_timemgr;
|
||||||
|
|
||||||
|
// Scene converter where many scene entities are registered
|
||||||
|
// Used to deregister objects that are deleted
|
||||||
|
class KX_BlenderSceneConverter* m_sceneConverter;
|
||||||
/**
|
/**
|
||||||
* physics engine abstraction
|
* physics engine abstraction
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//e_PhysicsEngine m_physicsEngine; //who needs this ?
|
//e_PhysicsEngine m_physicsEngine; //who needs this ?
|
||||||
class PHY_IPhysicsEnvironment* m_physicsEnvironment;
|
class PHY_IPhysicsEnvironment* m_physicsEnvironment;
|
||||||
|
|
||||||
@ -517,6 +520,8 @@ public:
|
|||||||
bool IsClearingZBuffer();
|
bool IsClearingZBuffer();
|
||||||
void EnableZBufferClearing(bool isclearingZbuffer);
|
void EnableZBufferClearing(bool isclearingZbuffer);
|
||||||
|
|
||||||
|
void SetSceneConverter(class KX_BlenderSceneConverter* sceneConverter);
|
||||||
|
|
||||||
class PHY_IPhysicsEnvironment* GetPhysicsEnvironment()
|
class PHY_IPhysicsEnvironment* GetPhysicsEnvironment()
|
||||||
{
|
{
|
||||||
return m_physicsEnvironment;
|
return m_physicsEnvironment;
|
||||||
|
Loading…
Reference in New Issue
Block a user