aboutsummaryrefslogtreecommitdiff
path: root/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
diff options
context:
space:
mode:
authorAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
committerAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
commitd41654b469fa51870b5952c836c04d9da17f32d3 (patch)
tree64f8f437eef394630355f281d35ca1d53e5c4d6c /tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
parentadd +x for packman script (diff)
downloadarchived-blast-d41654b469fa51870b5952c836c04d9da17f32d3.tar.xz
archived-blast-d41654b469fa51870b5952c836c04d9da17f32d3.zip
Updated to CL 22627414:
* docs updates * authoring fixes * stress solver crash fixes
Diffstat (limited to 'tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp')
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp40
1 files changed, 27 insertions, 13 deletions
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
index 2c39824..857cb9b 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
@@ -36,7 +36,7 @@
#include "NvBlastExtPxAsset.h"
#include <sstream>
#include <fstream>
-#include "NvBlastExtExporterFbxReader.h"
+#include "NvBlastExtExporter.h"
#include "PxPhysics.h"
#include <NvBlastGlobals.h>
#include "NvBlastExtAssetUtils.h"
@@ -46,6 +46,8 @@
#include "NvBlastExtLlSerialization.h"
#include "NvBlastExtTkSerialization.h"
#include "NvBlastExtPxSerialization.h"
+#include "NvBlastExtAuthoring.h"
+#include "NvBlastExtAuthoringCollisionBuilder.h"
BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxCooking& cooking, ExtSerialization& serialization, Renderer& renderer, const char* modelName, const char* modelPath)
: BlastAsset(renderer)
@@ -179,27 +181,31 @@ BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxC
path = GlobalSettings::MakeFileName(modelPath, objFileName.str().c_str());
if (QFile::exists(path.c_str()))
{
- FbxFileReader rdr;
- rdr.loadFromFile(path);
- if (rdr.isCollisionLoaded() == 0)
+ std::shared_ptr<IFbxFileReader> rdr(NvBlastExtExporterCreateFbxFileReader(), [](IFbxFileReader* p) {p->release(); });
+ rdr->loadFromFile(path.c_str());
+ if (rdr->isCollisionLoaded() == 0)
{
ASSERT_PRINT(false, "fbx doesn't contain collision geometry");
}
- std::vector<std::vector<CollisionHull> > hulls;
- rdr.getCollision(hulls);
+ uint32_t* hullsOffsets = nullptr;
+ CollisionHull** hulls = nullptr;
+ uint32_t meshCount = rdr->getCollision(hullsOffsets, hulls);
/**
Create physics meshes;
*/
- Nv::Blast::ConvexMeshBuilder collisionBuilder(&cooking, &physics.getPhysicsInsertionCallback());
- physicsChunks.resize(hulls.size());
- physicsSubchunks.resize(hulls.size());
+ std::shared_ptr<Nv::Blast::ConvexMeshBuilder> collisionBuilder(
+ NvBlastExtAuthoringCreateConvexMeshBuilder(&cooking, &physics.getPhysicsInsertionCallback()),
+ [](Nv::Blast::ConvexMeshBuilder* cmb) {cmb->release(); });
- for (uint32_t i = 0; i < hulls.size(); ++i)
+ physicsChunks.resize(meshCount);
+ physicsSubchunks.resize(meshCount);
+
+ for (uint32_t i = 0; i < meshCount; ++i)
{
- for (uint32_t sbHulls = 0; sbHulls < hulls[i].size(); ++sbHulls)
+ for (uint32_t sbHulls = hullsOffsets[i]; sbHulls < hullsOffsets[i+1]; ++sbHulls)
{
- PxConvexMeshGeometry temp = physx::PxConvexMeshGeometry(collisionBuilder.buildConvexMesh(hulls[i][sbHulls]));
+ PxConvexMeshGeometry temp = physx::PxConvexMeshGeometry(collisionBuilder.get()->buildConvexMesh(*hulls[sbHulls]));
if (temp.isValid())
{
physicsSubchunks[i].push_back(ExtPxAssetDesc::SubchunkDesc());
@@ -208,12 +214,20 @@ BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxC
}
}
}
- for (uint32_t i = 0; i < hulls.size(); ++i)
+ for (uint32_t i = 0; i < meshCount; ++i)
{
physicsChunks[i].isStatic = false;
physicsChunks[i].subchunkCount = (uint32_t)physicsSubchunks[i].size();
physicsChunks[i].subchunks = physicsSubchunks[i].data();
}
+ if (hullsOffsets)
+ {
+ NVBLAST_FREE(hullsOffsets);
+ }
+ if (hulls)
+ {
+ NVBLAST_FREE(hulls);
+ }
}
m_pxAsset = ExtPxAsset::create(tkAsset, physicsChunks.data(), (uint32_t)physicsChunks.size());
ASSERT_PRINT(m_pxAsset != nullptr, "can't create asset");