aboutsummaryrefslogtreecommitdiff
path: root/sdk/toolkit/source/NvBlastTkAssetImpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/toolkit/source/NvBlastTkAssetImpl.h')
-rw-r--r--sdk/toolkit/source/NvBlastTkAssetImpl.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/sdk/toolkit/source/NvBlastTkAssetImpl.h b/sdk/toolkit/source/NvBlastTkAssetImpl.h
new file mode 100644
index 0000000..ae68af8
--- /dev/null
+++ b/sdk/toolkit/source/NvBlastTkAssetImpl.h
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+*
+* NVIDIA CORPORATION and its licensors retain all intellectual property
+* and proprietary rights in and to this software, related documentation
+* and any modifications thereto. Any use, reproduction, disclosure or
+* distribution of this software and related documentation without an express
+* license agreement from NVIDIA CORPORATION is strictly prohibited.
+*/
+
+#ifndef NVBLASTTKASSETIMPL_H
+#define NVBLASTTKASSETIMPL_H
+
+
+#include "NvBlastTkCommon.h"
+#include "NvBlastTkJoint.h"
+#include "NvBlastTkAsset.h"
+#include "NvBlastTkTypeImpl.h"
+#include "NvBlastTkArray.h"
+
+
+// Forward declarations
+struct NvBlastAsset;
+
+
+namespace Nv
+{
+namespace Blast
+{
+
+/**
+Implementation of TkAsset
+*/
+NVBLASTTK_IMPL_DECLARE(Asset)
+{
+public:
+ /**
+ Enum which keeps track of the serialized data format.
+ */
+ enum Version
+ {
+ /** Initial version */
+ Initial,
+
+ // New formats must come before Count. They should be given descriptive names with more information in comments.
+
+ /** The number of serialized formats. */
+ Count,
+
+ /** The current version. This should always be Count-1 */
+ Current = Count - 1
+ };
+
+ TkAssetImpl();
+ TkAssetImpl(const NvBlastID& id);
+ ~TkAssetImpl();
+
+ NVBLASTTK_IMPL_DEFINE_SERIALIZABLE('A', 'S', 'S', 'T');
+
+ // Public methods
+
+ /**
+ Factory create method. This method creates a low-level asset and stores a reference to it.
+
+ \param[in] desc Asset descriptor set by the user.
+
+ \return a pointer to a new TkAssetImpl object if successful, NULL otherwise.
+ */
+ static TkAssetImpl* create(const TkAssetDesc& desc);
+
+ /**
+ Static method to create an asset from an existing low-level asset.
+
+ \param[in] assetLL A valid low-level asset passed in by the user.
+ \param[in] jointDescs Optional joint descriptors to add to the new asset.
+ \param[in] jointDescCount The number of joint descriptors in the jointDescs array. If non-zero, jointDescs cannot be NULL.
+ \param[in] ownsAsset Whether or not to let this TkAssetImpl object release the low-level NvBlastAsset memory upon its own release.
+
+ \return a pointer to a new TkAssetImpl object if successful, NULL otherwise.
+ */
+ static TkAssetImpl* create(const NvBlastAsset* assetLL, Nv::Blast::TkAssetJointDesc* jointDescs = nullptr, uint32_t jointDescCount = 0, bool ownsAsset = false);
+
+ /**
+ \return a pointer to the underlying low-level NvBlastAsset associated with this asset.
+ */
+ const NvBlastAsset* getAssetLLInternal() const;
+
+ /**
+ \return the number of internal joint descriptors stored with this asset.
+ */
+ uint32_t getJointDescCountInternal() const;
+
+ /**
+ \return the array of internal joint descriptors stored with this asset, with size given by getJointDescCountInternal().
+ */
+ const TkAssetJointDesc* getJointDescsInternal() const;
+
+ // Begin TkAsset
+ virtual const NvBlastAsset* getAssetLL() const override;
+
+ virtual uint32_t getChunkCount() const override;
+
+ virtual uint32_t getLeafChunkCount() const override;
+
+ virtual uint32_t getBondCount() const override;
+
+ virtual const NvBlastChunk* getChunks() const override;
+
+ virtual const NvBlastBond* getBonds() const override;
+
+ virtual const NvBlastSupportGraph getGraph() const override;
+
+ virtual uint32_t getDataSize() const override;
+
+ virtual uint32_t getJointDescCount() const override;
+
+ virtual const TkAssetJointDesc* getJointDescs() const override;
+ // End TkAsset
+
+private:
+ /**
+ Utility to add a joint descriptor between the indexed chunks. The two chunks
+ must be support chunks, and there must exist a bond between them. The joint's
+ attachment positions will be the bond centroid.
+
+ \param[in] chunkIndex0 The first chunk index.
+ \param[in] chunkIndex1 The second chunk index.
+
+ \return true iff successful.
+ */
+ bool addJointDesc(uint32_t chunkIndex0, uint32_t chunkIndex1);
+
+ NvBlastAsset* m_assetLL; //!< The underlying low-level asset.
+ TkArray<TkAssetJointDesc>::type m_jointDescs; //!< The array of internal joint descriptors.
+ bool m_ownsAsset; //!< Whether or not this asset should release its low-level asset upon its own release.
+};
+
+
+//////// TkAssetImpl inline methods ////////
+
+NV_INLINE const NvBlastAsset* TkAssetImpl::getAssetLLInternal() const
+{
+ return m_assetLL;
+}
+
+
+NV_INLINE uint32_t TkAssetImpl::getJointDescCountInternal() const
+{
+ return m_jointDescs.size();
+}
+
+
+NV_INLINE const TkAssetJointDesc* TkAssetImpl::getJointDescsInternal() const
+{
+ return m_jointDescs.begin();
+}
+
+} // namespace Blast
+} // namespace Nv
+
+
+#endif // ifndef NVBLASTTKASSETIMPL_H