RavEngine
Loading...
Searching...
No Matches
BpVolumeData.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef BP_VOLUME_DATA_H
30#define BP_VOLUME_DATA_H
31
32#include "PxvConfig.h"
33#include "foundation/PxAssert.h"
34
35namespace physx
36{
37 namespace Bp
38 {
39 typedef PxU32 AggregateHandle; // PT: currently an index in mAggregates array
40
42 {
43 enum Enum
44 {
45 eSHAPE = 0,
46 eTRIGGER,
47
48 eCOUNT
49 };
50 };
51 PX_COMPILE_TIME_ASSERT(ElementType::eCOUNT <= 4); // 2 bits reserved for type
52
53 #define PX_CUDA_INLINE PX_CUDA_CALLABLE PX_FORCE_INLINE
54
56 {
57 PX_CUDA_INLINE void reset()
58 {
59 mAggregate = PX_INVALID_U32;
60 mUserData = NULL;
61 }
62
63 PX_CUDA_INLINE void setSingleActor() { mAggregate = PX_INVALID_U32; }
64 PX_CUDA_INLINE bool isSingleActor() const { return mAggregate == PX_INVALID_U32; }
65
66 PX_CUDA_INLINE void setUserData(void* userData)
67 {
68// PX_ASSERT(!(size_t(userData) & 3));
69 mUserData = userData;
70 }
71
72 PX_CUDA_INLINE void* getUserData() const
73 {
74 return reinterpret_cast<void*>(size_t(mUserData)& (~size_t(3)));
75 }
76
77 PX_CUDA_INLINE void setVolumeType(ElementType::Enum volumeType)
78 {
79 PX_ASSERT(volumeType < 2);
80 mUserData = reinterpret_cast<void*>(size_t(getUserData()) | size_t(volumeType));
81 }
82
83 PX_CUDA_INLINE ElementType::Enum getVolumeType() const
84 {
85 return ElementType::Enum(size_t(mUserData) & 3);
86 }
87
88 PX_CUDA_INLINE void setAggregate(AggregateHandle handle)
89 {
90 PX_ASSERT(handle != PX_INVALID_U32);
91 mAggregate = (handle << 1) | 1;
92 }
93
94 PX_CUDA_INLINE bool isAggregate() const { return !isSingleActor() && ((mAggregate & 1) != 0); }
95
96 PX_CUDA_INLINE void setAggregated(AggregateHandle handle)
97 {
98 PX_ASSERT(handle != PX_INVALID_U32);
99 mAggregate = (handle << 1) | 0;
100 }
101
102 PX_CUDA_INLINE bool isAggregated() const
103 {
104 return !isSingleActor() && ((mAggregate & 1) == 0);
105 }
106
107 PX_CUDA_INLINE AggregateHandle getAggregateOwner() const { return mAggregate >> 1; }
108 PX_CUDA_INLINE AggregateHandle getAggregate() const { return mAggregate >> 1; }
109
110 private:
111 void* mUserData;
112 // PT: TODO: consider moving this to a separate array, which wouldn't be allocated at all for people not using aggregates.
113 // PT: current encoding:
114 // aggregate == PX_INVALID_U32 => single actor
115 // aggregate != PX_INVALID_U32 => aggregate index<<1|LSB. LSB==1 for aggregates, LSB==0 for aggregated actors.
116 AggregateHandle mAggregate;
117 };
118
119 }
120}
121
122#endif
123
#define PX_COMPILE_TIME_ASSERT(exp)
Definition PxPreprocessor.h:428
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Definition BpVolumeData.h:42
Definition BpVolumeData.h:56