1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
// This code contains NVIDIA Confidential Information and is disclosed to you
// under a form of NVIDIA software license agreement provided separately to you.
//
// Notice
// NVIDIA Corporation and its licensors retain all intellectual property and
// proprietary rights in and to this software and 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.
//
// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
//
// Information and code furnished is believed to be accurate and reliable.
// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
// information or for any infringement of patents or other rights of third parties that may
// result from its use. No license is granted by implication or otherwise under any patent
// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
// This code supersedes and replaces all information previously supplied.
// NVIDIA Corporation products are not authorized for use as critical
// components in life support devices or systems without express written approval of
// NVIDIA Corporation.
//
// Copyright (c) 2016-2018 NVIDIA Corporation. All rights reserved.
#ifndef NVBLASTTKASSETIMPL_H
#define NVBLASTTKASSETIMPL_H
#include "NvBlastTkCommon.h"
#include "NvBlastTkJoint.h"
#include "NvBlastTkAsset.h"
#include "NvBlastTkTypeImpl.h"
#include "NvBlastArray.h"
// Forward declarations
struct NvBlastAsset;
namespace Nv
{
namespace Blast
{
/**
Implementation of TkAsset
*/
NVBLASTTK_IMPL_DECLARE(Asset)
{
public:
TkAssetImpl();
TkAssetImpl(const NvBlastID& id);
~TkAssetImpl();
NVBLASTTK_IMPL_DEFINE_IDENTIFIABLE('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.
Array<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
|