12GX_CORE_NAMESPACE_BEGIN()
14#define GX_RIGHT_HAND 1
18#define GX_OCTREE_ASYNC 0
20#define GX_OCTREE_SEQUENCE 1
22#define GX_OCTREE_STATIC 2
24#define GX_OCTREE_POOL 3
26#define GX_OCTREE_TYPE GX_OCTREE_POOL
30#define GX_OCTREE_INFO 1
32#define GX_OCTREE_INFO 0
77 value = (value ^ (value << 16) ) & 0xFF0000FF;
78 value = (value ^ (value << 8) ) & 0x0300F00F;
79 value = (value ^ (value << 4) ) & 0x030C30C3;
80 value = (value ^ (value << 2) ) & 0x09249249;
103#if (GX_OCTREE_TYPE == GX_OCTREE_POOL)
109 void initialize(u32 level, GxVector3& min, GxVector3& max);
125 GX_FORCE_INLINE
void startCulling(
void){ _criticalSectionRegist.
lock(); _inCulling =
true; _criticalSectionRegist.
unlock();}
127 GX_FORCE_INLINE
void endCulling(
void){ _criticalSectionRegist.
lock(); _inCulling =
false; _criticalSectionRegist.
unlock(); }
131#if (GX_OCTREE_TYPE == GX_OCTREE_POOL)
134 void createCriticalSectionNode(u32 levelNonShare, u32 numCriticalSectionShared);
136 void deleteCriticalSectionNode(
void);
152 u32
getMortonCode(
const u32& x,
const u32& y,
const u32& z)
const;
206 GX_FORCE_INLINE
const u32
getUnitNodeCount(
const u32& level)
const {
return _pUnitCount[level]; }
216 GX_FORCE_INLINE
const u32
getElementIndex(
const u32& level,
const u32& localIndex)
const {
return (_pStartIndex[level] + localIndex); }
233 b32* _pTemporaryFind;
242#if (GX_OCTREE_TYPE == GX_OCTREE_POOL)
248 u32 _numCriticalSectionShared;
250 u32 _numCriticalSectionNonShared;
303#if (GX_OCTREE_TYPE != GX_OCTREE_SEQUENCE)
304#if (GX_OCTREE_TYPE == GX_OCTREE_POOL)
345#if (GX_OCTREE_TYPE != GX_OCTREE_SEQUENCE)
346#if (GX_OCTREE_TYPE == GX_OCTREE_ASYNC)
349#elif (GX_OCTREE_TYPE == GX_OCTREE_STATIC)
353#if (GX_OCTREE_TYPE == GX_OCTREE_POOL)
362GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
ALLOCATOR_TYPE
アロケータ定義
Definition GxAllocator.h:355
配列クラス
Definition GxArray.h:18
constexpr u32 getCount(void) const
配列数を取得
Definition GxArray.h:132
オブジェクト基底クラス
Definition GxBase.h:88
基底クラス
Definition GxBase.h:51
クリティカルセクションクラス
Definition GxThread.h:20
void lock(void)
ロック
Definition GxThread.cpp:139
void unlock(void)
アンロック
Definition GxThread.cpp:154
8分木ノードクラス
Definition GxOctree.h:265
virtual GX_FORCE_INLINE b32 isEmpty(void) const
ノードにオブジェクトが含まれているか
Definition GxOctree.h:324
constexpr void setCriticalSectionArray(GxCriticalSection *pCriticalSection)
Definition GxOctree.h:308
b32 findObject(GxClassBaseRoot *pObject) const
オブジェクトを検索
Definition GxOctree.cpp:772
~GxNode(void) override
デストラクタ
Definition GxOctree.cpp:754
void setLock(void)
リスト用クリティカルセクションでロックする
Definition GxOctree.cpp:871
void setUnlock(void)
リスト用クリティカルセクションのロックを解放
Definition GxOctree.cpp:886
constexpr GxArray * getObjectList(void) const
Definition GxOctree.h:328
GxNode(void)
デフォルトコンストラクタ
Definition GxOctree.cpp:739
GX_FORCE_INLINE const GxShapeAxisAlignedBox & getBoudingBox(void) const
Definition GxOctree.h:335
b32 addObject(GxClassBaseRoot *pObject)
オブジェクトを追加
Definition GxOctree.cpp:794
void clearObjects(void)
全ての登録オブジェクトの削除
Definition GxOctree.cpp:851
GX_FORCE_INLINE GxShapeAxisAlignedBox & getBoudingBox(void)
Definition GxOctree.h:332
b32 deleteObject(GxClassBaseRoot *pObject)
全ての登録オブジェクトの削除
Definition GxOctree.cpp:819
8分木クラス
Definition GxOctree.h:39
void queryHighLevel(s32 &levelCount, u32 &arExorN, const GxVector3 &min, const GxVector3 &max) const
与えれれた座標でAABB、直線などが作られる場合にのオブジェクトが含まれれる最上位空間を取得
Definition GxOctree.cpp:354
virtual void beginBuildTree(void)
ツリーの構築
Definition GxOctree.cpp:284
GX_FORCE_INLINE GxVector3 & getMin(void)
Definition GxOctree.h:178
GxOctree(void)
デフォルトコンストラクタ
Definition GxOctree.cpp:28
GX_FORCE_INLINE void startCulling(void)
カリング開始
Definition GxOctree.h:125
constexpr u32 getTreeLevel(void) const
Definition GxOctree.h:192
GX_FORCE_INLINE GxVector3 & getMax(void)
Definition GxOctree.h:185
GX_FORCE_INLINE GxVector3 & getUnitLength(void)
Definition GxOctree.h:171
virtual b32 isEmpty(void) const
Definition GxOctree.h:160
GX_FORCE_INLINE const u32 getLeafNodeCount(u32 leaf) const
Definition GxOctree.h:201
void initialize(u32 level, GxVector3 &min, GxVector3 &max, u32 levelNonShared=0, u32 numCsecShared=10)
Definition GxOctree.cpp:218
constexpr u32 getNodeCount(void) const
Definition GxOctree.h:196
virtual void finishBuildTree(void)
ツリーの破棄
Definition GxOctree.cpp:301
b32 addObject(GxClassBaseRoot *pObject, const GxVector3 &min, const GxVector3 &max)
オブジェクトをオクツリーに追加
Definition GxOctree.cpp:564
GxAllocatorList::ALLOCATOR_TYPE _allocatorType
アロケータ種別
Definition GxOctree.h:240
virtual void eraseTree(void)
全体を削除
Definition GxOctree.cpp:110
GX_FORCE_INLINE void endCulling(void)
カリング終了
Definition GxOctree.h:127
GxArray * _pGlobalObjectList
インスタンスグローバルリスト
Definition GxOctree.h:236
GX_FORCE_INLINE b32 isRegisting(void) const
Definition GxOctree.h:156
constexpr GxArray * getGlobalObjectList(void) const
Definition GxOctree.h:210
void eraseAllObject(void)
全てのオブジェクトを削除
Definition GxOctree.cpp:651
u32 getBBMortonCode(const GxVector3 &min, const GxVector3 &max) const
二つの空間座標からBBが含まれる、最上位空間のモートンコードを取得
Definition GxOctree.cpp:150
virtual b32 windowQueryForBB(GxArray &arvSpaces, const GxVector3 &min, const GxVector3 &max)
ウインドウクエリを行う
Definition GxOctree.cpp:378
GX_FORCE_INLINE GxArray & getNodeArray(void)
ノード配列を取得
Definition GxOctree.h:164
GX_FORCE_INLINE const u32 getUnitNodeCount(const u32 &level) const
Definition GxOctree.h:206
constexpr u32 part1By2(u32 value) const
3ビットトビに分割
Definition GxOctree.h:75
void queryLowerLevelSpaces(const GxVector3 &leftTopBack, const u32 &initialAABB, const u32 &aunParentLevelN, const u32 &aunParentSpace, b32 *pDirtyFlags)
下層の空間情報を取得
Definition GxOctree.cpp:469
b32 findObject(GxClassBaseRoot *pObject) const
オブジェクトを検索
Definition GxOctree.cpp:540
u32 getPointMortonCode(const f32 &x, const f32 &y, const f32 &z) const
指定ポイントのモートン順序のコードを取得
Definition GxOctree.cpp:175
GX_FORCE_INLINE const GxVector3 & getUnitLength(void) const
Definition GxOctree.h:174
b32 eraseObject(GxClassBaseRoot *pObject, const GxVector3 &min, const GxVector3 &max)
オブジェクトをオクツリーから削除
Definition GxOctree.cpp:606
GX_FORCE_INLINE const u32 getElementIndex(const u32 &level, const u32 &localIndex) const
Definition GxOctree.h:216
~GxOctree(void) override
デストラクタ
Definition GxOctree.cpp:86
virtual GxOctree::GxNode * allocateNode(void)
GxNodeのメモリ確保
Definition GxOctree.cpp:138
u32 getMortonCode(const u32 &x, const u32 &y, const u32 &z) const
モートン順序のコードを取得
Definition GxOctree.cpp:198
b32 updateTreeSize(GxVector3 &min, GxVector3 &max)
ツリーのサイズを更新
Definition GxOctree.cpp:316
GX_FORCE_INLINE const GxVector3 & getMax(void) const
Definition GxOctree.h:188
GX_FORCE_INLINE const GxVector3 & getMin(void) const
Definition GxOctree.h:181
GX_FORCE_INLINE const GxArray & getNodeArray(void) const
ノード配列を取得
Definition GxOctree.h:167
軸方向固定の箱形状クラス
Definition GxShape.h:418
static constexpr u32 THREAD_MAX
スレッドの最大数
Definition GxThread.h:188
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173