From e1bf674c16e3c8472b29574159c789cd3f0c64e0 Mon Sep 17 00:00:00 2001 From: Bryan Galdrikian Date: Fri, 24 Feb 2017 09:32:20 -0800 Subject: Updating to blast_source-windows@1.0.347-21749006 and blast_tools_and_samples-windows@1.0.347-21749006 with a new directory structure. NvBlast folder is gone, files have been moved to top level directory. README is changed to reflect this. --- .../source/NvBlastExtSerialization.cpp | 146 +++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 sdk/extensions/serialization/source/NvBlastExtSerialization.cpp (limited to 'sdk/extensions/serialization/source/NvBlastExtSerialization.cpp') diff --git a/sdk/extensions/serialization/source/NvBlastExtSerialization.cpp b/sdk/extensions/serialization/source/NvBlastExtSerialization.cpp new file mode 100644 index 0000000..28a1553 --- /dev/null +++ b/sdk/extensions/serialization/source/NvBlastExtSerialization.cpp @@ -0,0 +1,146 @@ +#include "NvBlastExtSerialization.h" +#include "BlastSerialization.h" +#include +#include "PxPhysicsVersion.h" +#include "PxConvexMeshGeometryDTO.h" +#include "NvBlastExtDefs.h" + + +// This is terrible. +physx::PxPhysics* g_Physics = nullptr; + + +std::shared_ptr getCooking() +{ + physx::PxCookingParams cookingParams(g_Physics->getTolerancesScale()); + cookingParams.buildGPUData = true; + + std::shared_ptr m_Cooking = std::shared_ptr(PxCreateCooking(PX_PHYSICS_VERSION, g_Physics->getFoundation(), cookingParams), [=](physx::PxCooking* cooking) + { + cooking->release(); + }); + + NVBLASTEXT_CHECK_ERROR(m_Cooking, "Error: failed to create PhysX Cooking\n", return nullptr); + + return m_Cooking; +} + + +extern "C" +{ + NVBLAST_API void setPhysXSDK(physx::PxPhysics* physXSDK) + { + g_Physics = physXSDK; + } + + NVBLAST_API NvBlastAsset* deserializeAsset(const unsigned char* input, uint32_t size) + { + return Nv::Blast::BlastSerialization::deserialize(input, size); + } + + NVBLAST_API NvBlastAsset* deserializeAssetFromStream(std::istream &inputStream) + { + return Nv::Blast::BlastSerialization::deserializeFromStream(inputStream); + } + + NVBLAST_API bool serializeAssetIntoStream(const NvBlastAsset *asset, std::ostream &outputStream) + { + return Nv::Blast::BlastSerialization::serializeIntoStream(reinterpret_cast(asset), outputStream); + } + + NVBLAST_API bool serializeAssetIntoNewBuffer(const NvBlastAsset *asset, unsigned char **outBuffer, uint32_t &outSize) + { + return Nv::Blast::BlastSerialization::serializeIntoNewBuffer(reinterpret_cast(asset), outBuffer, outSize); + } + + NVBLAST_API bool serializeAssetIntoExistingBuffer(const NvBlastAsset *asset, unsigned char *buffer, uint32_t maxSize, uint32_t &usedSize) + { + return Nv::Blast::BlastSerialization::serializeIntoExistingBuffer(reinterpret_cast(asset), buffer, maxSize, usedSize); + } + + ////////////////////////////////////////////////////////////////////////// + // TkAsset + ////////////////////////////////////////////////////////////////////////// + + NVBLAST_API Nv::Blast::TkAsset* deserializeTkAsset(const unsigned char* input, uint32_t size) + { + return Nv::Blast::BlastSerialization::deserialize(input, size); + } + + NVBLAST_API Nv::Blast::TkAsset* deserializeTkAssetFromStream(std::istream &inputStream) + { + return Nv::Blast::BlastSerialization::deserializeFromStream(inputStream); + } + + NVBLAST_API bool serializeTkAssetIntoStream(const Nv::Blast::TkAsset *asset, std::ostream &outputStream) + { + return Nv::Blast::BlastSerialization::serializeIntoStream(reinterpret_cast(asset), outputStream); + } + + NVBLAST_API bool serializeTkAssetIntoNewBuffer(const Nv::Blast::TkAsset *asset, unsigned char **outBuffer, uint32_t &outSize) + { + return Nv::Blast::BlastSerialization::serializeIntoNewBuffer(reinterpret_cast(asset), outBuffer, outSize); + } + + NVBLAST_API bool serializeTkAssetIntoExistingBuffer(const Nv::Blast::TkAsset *asset, unsigned char *buffer, uint32_t maxSize, uint32_t &usedSize) + { + return Nv::Blast::BlastSerialization::serializeIntoExistingBuffer(reinterpret_cast(asset), buffer, maxSize, usedSize); + } + + ////////////////////////////////////////////////////////////////////////// + // ExtPxAsset + ////////////////////////////////////////////////////////////////////////// + + NVBLAST_API Nv::Blast::ExtPxAsset* deserializeExtPxAsset(const unsigned char* input, uint32_t size) + { + NVBLAST_ASSERT(g_Physics != nullptr); + + return Nv::Blast::BlastSerialization::deserialize(input, size); + } + + NVBLAST_API Nv::Blast::ExtPxAsset* deserializeExtPxAssetFromStream(std::istream &inputStream) + { + NVBLAST_ASSERT(g_Physics != nullptr); + + return Nv::Blast::BlastSerialization::deserializeFromStream(inputStream); + } + + NVBLAST_API bool serializeExtPxAssetIntoStream(const Nv::Blast::ExtPxAsset *asset, std::ostream &outputStream) + { + NVBLAST_ASSERT(g_Physics != nullptr); + + auto cooking = getCooking(); + + PxConvexMeshGeometryDTO::Cooking = cooking.get(); + PxConvexMeshGeometryDTO::Physics = g_Physics; + + return Nv::Blast::BlastSerialization::serializeIntoStream(reinterpret_cast(asset), outputStream); + } + + NVBLAST_API bool serializeExtPxAssetIntoNewBuffer(const Nv::Blast::ExtPxAsset *asset, unsigned char **outBuffer, uint32_t &outSize) + { + NVBLAST_ASSERT(g_Physics != nullptr); + + auto cooking = getCooking(); + + PxConvexMeshGeometryDTO::Cooking = cooking.get(); + PxConvexMeshGeometryDTO::Physics = g_Physics; + + return Nv::Blast::BlastSerialization::serializeIntoNewBuffer(reinterpret_cast(asset), outBuffer, outSize); + } + + NVBLAST_API bool serializeExtPxAssetIntoExistingBuffer(const Nv::Blast::ExtPxAsset *asset, unsigned char *buffer, uint32_t maxSize, uint32_t &usedSize) + { + NVBLAST_ASSERT(g_Physics != nullptr); + + auto cooking = getCooking(); + + PxConvexMeshGeometryDTO::Cooking = cooking.get(); + PxConvexMeshGeometryDTO::Physics = g_Physics; + + return Nv::Blast::BlastSerialization::serializeIntoExistingBuffer(reinterpret_cast(asset), buffer, maxSize, usedSize); + } + + +} + -- cgit v1.2.3