15 #include "physxMeshPool.h"
16 #include "physxConvexMesh.h"
17 #include "physxTriangleMesh.h"
18 #include "physxClothMesh.h"
19 #include "physxSoftBodyMesh.h"
21 #include "physxFileStream.h"
22 #include "virtualFileSystem.h"
38 physx_cat.error() <<
"File does not exists: " << fn << endl;
43 physx_cat.error() <<
"Not a regular file: " << fn << endl;
56 load_convex_mesh(
const Filename &fn) {
58 if (!check_filename(fn))
return NULL;
62 ConvexMeshes::iterator it = _convex_meshes.find(fn);
63 if (it == _convex_meshes.end()) {
65 NxConvexMesh *meshPtr;
69 nassertr_always(mesh, NULL);
71 NxPhysicsSDK *sdk = NxGetPhysicsSDK();
72 nassertr_always(sdk, NULL);
74 meshPtr = sdk->createConvexMesh(stream);
75 nassertr_always(meshPtr, NULL);
79 _convex_meshes.insert(ConvexMeshes::value_type(fn, mesh));
95 load_triangle_mesh(
const Filename &fn) {
97 if (!check_filename(fn))
return NULL;
101 TriangleMeshes::iterator it = _triangle_meshes.find(fn);
102 if (it == _triangle_meshes.end()) {
104 NxTriangleMesh *meshPtr;
108 nassertr_always(mesh, NULL);
110 NxPhysicsSDK *sdk = NxGetPhysicsSDK();
111 nassertr_always(sdk, NULL);
113 meshPtr = sdk->createTriangleMesh(stream);
114 nassertr_always(meshPtr, NULL);
118 _triangle_meshes.insert(TriangleMeshes::value_type(fn, mesh));
134 load_cloth_mesh(
const Filename &fn) {
136 if (!check_filename(fn))
return NULL;
140 ClothMeshes::iterator it = _cloth_meshes.find(fn);
141 if (it == _cloth_meshes.end()) {
143 NxClothMesh *meshPtr;
147 nassertr_always(mesh, NULL);
149 NxPhysicsSDK *sdk = NxGetPhysicsSDK();
150 nassertr_always(sdk, NULL);
152 meshPtr = sdk->createClothMesh(stream);
153 nassertr_always(meshPtr, NULL);
157 _cloth_meshes.insert(ClothMeshes::value_type(fn, mesh));
173 load_soft_body_mesh(
const Filename &fn) {
175 if (!check_filename(fn))
return NULL;
179 SoftbodyMeshes::iterator it = _softbody_meshes.find(fn);
180 if (it == _softbody_meshes.end()) {
182 NxSoftBodyMesh *meshPtr;
186 nassertr_always(mesh, NULL);
188 NxPhysicsSDK *sdk = NxGetPhysicsSDK();
189 nassertr_always(sdk, NULL);
191 meshPtr = sdk->createSoftBodyMesh(stream);
192 nassertr_always(meshPtr, NULL);
196 _softbody_meshes.insert(SoftbodyMeshes::value_type(fn, mesh));
214 ConvexMeshes::iterator it;
215 for (it=_convex_meshes.begin(); it != _convex_meshes.end(); ++it) {
216 if (mesh == (*it).second) {
217 _convex_meshes.erase(it);
233 TriangleMeshes::iterator it;
234 for (it=_triangle_meshes.begin(); it != _triangle_meshes.end(); ++it) {
235 if (mesh == (*it).second) {
236 _triangle_meshes.erase(it);
252 ClothMeshes::iterator it;
253 for (it=_cloth_meshes.begin(); it != _cloth_meshes.end(); ++it) {
254 if (mesh == (*it).second) {
255 _cloth_meshes.erase(it);
271 SoftbodyMeshes::iterator it;
272 for (it=_softbody_meshes.begin(); it != _softbody_meshes.end(); ++it) {
273 if (mesh == (*it).second) {
274 _softbody_meshes.erase(it);
298 list_contents(ostream &out) {
300 out <<
"PhysX mesh pool contents:\n";
304 ConvexMeshes::const_iterator it;
305 for (it=_convex_meshes.begin(); it != _convex_meshes.end(); ++it) {
310 <<
" (convex mesh, " << mesh->ptr()->getReferenceCount()
311 <<
" references)" << endl;
317 TriangleMeshes::const_iterator it;
318 for (it=_triangle_meshes.begin(); it != _triangle_meshes.end(); ++it) {
323 <<
" (triangle mesh, " << mesh->ptr()->getReferenceCount()
330 ClothMeshes::const_iterator it;
331 for (it=_cloth_meshes.begin(); it != _cloth_meshes.end(); ++it) {
336 <<
" (cloth mesh, " << mesh->ptr()->getReferenceCount()
343 SoftbodyMeshes::const_iterator it;
344 for (it=_softbody_meshes.begin(); it != _softbody_meshes.end(); ++it) {
349 <<
" (soft body mesh, " << mesh->ptr()->getReferenceCount()
355 NxPhysicsSDK *sdk = NxGetPhysicsSDK();
357 out <<
" Total number of convex meshes: " << sdk->getNbConvexMeshes()
358 <<
" created, " << _convex_meshes.size() <<
" registred\n";
360 out <<
" Total number of triangle meshes: " << sdk->getNbTriangleMeshes()
361 <<
" created, " << _triangle_meshes.size() <<
" registred\n";
363 out <<
" Total number of cloth meshes: " << sdk->getNbClothMeshes()
364 <<
" created, " << _cloth_meshes.size() <<
" registred\n";
366 out <<
" Total number of soft body meshes: " << sdk->getNbSoftBodyMeshes()
367 <<
" created, " << _softbody_meshes.size() <<
" registred\n";
string get_fullpath() const
Returns the entire filename: directory, basename, extension.
This is our own Panda specialization on the default STL map.
The name of a file, such as a texture file or an Egg file.
static VirtualFileSystem * get_global_ptr()
Returns the default global VirtualFileSystem.