mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
fix ode crash on exit
This commit is contained in:
parent
ea1d78b85e
commit
ae38a4eb44
@ -50,12 +50,12 @@
|
|||||||
|
|
||||||
Configure(config_ode);
|
Configure(config_ode);
|
||||||
NotifyCategoryDef(ode, "");
|
NotifyCategoryDef(ode, "");
|
||||||
NotifyCategoryDef(odeworld, "");
|
NotifyCategoryDef(odeworld, "ode");
|
||||||
NotifyCategoryDef(odebody, "");
|
NotifyCategoryDef(odebody, "ode");
|
||||||
NotifyCategoryDef(odejoint, "");
|
NotifyCategoryDef(odejoint, "ode");
|
||||||
NotifyCategoryDef(odespace, "");
|
NotifyCategoryDef(odespace, "ode");
|
||||||
NotifyCategoryDef(odegeom, "");
|
NotifyCategoryDef(odegeom, "ode");
|
||||||
NotifyCategoryDef(odetrimeshdata, "");
|
NotifyCategoryDef(odetrimeshdata, "ode");
|
||||||
|
|
||||||
ConfigureFn(config_ode) {
|
ConfigureFn(config_ode) {
|
||||||
init_libode();
|
init_libode();
|
||||||
|
@ -12,6 +12,14 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
INLINE OdeTriMeshData::TriMeshDataMap &OdeTriMeshData::
|
||||||
|
get_tri_mesh_data_map() {
|
||||||
|
if (_tri_mesh_data_map == (TriMeshDataMap *)NULL) {
|
||||||
|
_tri_mesh_data_map = new TriMeshDataMap;
|
||||||
|
}
|
||||||
|
return *_tri_mesh_data_map;
|
||||||
|
}
|
||||||
|
|
||||||
INLINE dTriMeshDataID OdeTriMeshData::
|
INLINE dTriMeshDataID OdeTriMeshData::
|
||||||
get_id() const {
|
get_id() const {
|
||||||
return _id;
|
return _id;
|
||||||
|
@ -15,18 +15,19 @@
|
|||||||
#include "odeTriMeshData.h"
|
#include "odeTriMeshData.h"
|
||||||
|
|
||||||
TypeHandle OdeTriMeshData::_type_handle;
|
TypeHandle OdeTriMeshData::_type_handle;
|
||||||
OdeTriMeshData::TriMeshDataMap OdeTriMeshData::_tri_mesh_data_map;
|
OdeTriMeshData::TriMeshDataMap *OdeTriMeshData::_tri_mesh_data_map = NULL;
|
||||||
|
|
||||||
void OdeTriMeshData::
|
void OdeTriMeshData::
|
||||||
link_data(dGeomID id, PT(OdeTriMeshData) data) {
|
link_data(dGeomID id, PT(OdeTriMeshData) data) {
|
||||||
odetrimeshdata_cat.debug() << get_class_type() << "::link_data(" << id << "->" << data << ")" << "\n";
|
odetrimeshdata_cat.debug() << get_class_type() << "::link_data(" << id << "->" << data << ")" << "\n";
|
||||||
_tri_mesh_data_map[id] = data;
|
get_tri_mesh_data_map()[id] = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
PT(OdeTriMeshData) OdeTriMeshData::
|
PT(OdeTriMeshData) OdeTriMeshData::
|
||||||
get_data(dGeomID id) {
|
get_data(dGeomID id) {
|
||||||
TriMeshDataMap::iterator iter = _tri_mesh_data_map.find(id);
|
const TriMeshDataMap &data_map = get_tri_mesh_data_map();
|
||||||
if (iter != _tri_mesh_data_map.end()) {
|
TriMeshDataMap::const_iterator iter = data_map.find(id);
|
||||||
|
if (iter != data_map.end()) {
|
||||||
return iter->second;
|
return iter->second;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -35,17 +36,19 @@ get_data(dGeomID id) {
|
|||||||
void OdeTriMeshData::
|
void OdeTriMeshData::
|
||||||
unlink_data(dGeomID id) {
|
unlink_data(dGeomID id) {
|
||||||
odetrimeshdata_cat.debug() << get_class_type() << "::unlink_data(" << id << ")" << "\n";
|
odetrimeshdata_cat.debug() << get_class_type() << "::unlink_data(" << id << ")" << "\n";
|
||||||
TriMeshDataMap::iterator iter = _tri_mesh_data_map.find(id);
|
nassertv(_tri_mesh_data_map != (TriMeshDataMap *)NULL);
|
||||||
if (iter != _tri_mesh_data_map.end()) {
|
TriMeshDataMap::iterator iter = _tri_mesh_data_map->find(id);
|
||||||
_tri_mesh_data_map.erase(iter);
|
if (iter != _tri_mesh_data_map->end()) {
|
||||||
|
_tri_mesh_data_map->erase(iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OdeTriMeshData::
|
void OdeTriMeshData::
|
||||||
print_data(const string &marker) {
|
print_data(const string &marker) {
|
||||||
odetrimeshdata_cat.debug() << get_class_type() << "::print_data(" << marker << ")\n";
|
odetrimeshdata_cat.debug() << get_class_type() << "::print_data(" << marker << ")\n";
|
||||||
TriMeshDataMap::iterator iter = _tri_mesh_data_map.begin();
|
const TriMeshDataMap &data_map = get_tri_mesh_data_map();
|
||||||
for (;iter != _tri_mesh_data_map.end(); ++iter) {
|
TriMeshDataMap::const_iterator iter = data_map.begin();
|
||||||
|
for (;iter != data_map.end(); ++iter) {
|
||||||
odetrimeshdata_cat.debug() << "\t" << iter->first << " : " << iter->second << "\n";
|
odetrimeshdata_cat.debug() << "\t" << iter->first << " : " << iter->second << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -53,21 +56,22 @@ print_data(const string &marker) {
|
|||||||
void OdeTriMeshData::
|
void OdeTriMeshData::
|
||||||
remove_data(OdeTriMeshData *data) {
|
remove_data(OdeTriMeshData *data) {
|
||||||
odetrimeshdata_cat.debug() << get_class_type() << "::remove_data(" << data->get_id() << ")" << "\n";
|
odetrimeshdata_cat.debug() << get_class_type() << "::remove_data(" << data->get_id() << ")" << "\n";
|
||||||
|
nassertv(_tri_mesh_data_map != (TriMeshDataMap *)NULL);
|
||||||
TriMeshDataMap::iterator iter;
|
TriMeshDataMap::iterator iter;
|
||||||
|
|
||||||
for (iter = _tri_mesh_data_map.begin();
|
for (iter = _tri_mesh_data_map->begin();
|
||||||
iter != _tri_mesh_data_map.end();
|
iter != _tri_mesh_data_map->end();
|
||||||
++iter) {
|
++iter) {
|
||||||
if ( iter->second == data ) {
|
if ( iter->second == data ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (iter != _tri_mesh_data_map.end()) {
|
while (iter != _tri_mesh_data_map->end()) {
|
||||||
_tri_mesh_data_map.erase(iter);
|
_tri_mesh_data_map->erase(iter);
|
||||||
|
|
||||||
for (iter = _tri_mesh_data_map.begin();
|
for (iter = _tri_mesh_data_map->begin();
|
||||||
iter != _tri_mesh_data_map.end();
|
iter != _tri_mesh_data_map->end();
|
||||||
++iter) {
|
++iter) {
|
||||||
if ( iter->second == data ) {
|
if ( iter->second == data ) {
|
||||||
break;
|
break;
|
||||||
|
@ -42,7 +42,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
typedef pmap<dGeomID, PT(OdeTriMeshData)> TriMeshDataMap;
|
typedef pmap<dGeomID, PT(OdeTriMeshData)> TriMeshDataMap;
|
||||||
static TriMeshDataMap _tri_mesh_data_map;
|
static TriMeshDataMap *_tri_mesh_data_map;
|
||||||
|
static INLINE TriMeshDataMap &get_tri_mesh_data_map();
|
||||||
|
|
||||||
PUBLISHED:
|
PUBLISHED:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user