1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: gfx_StandardSkeleton.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 28677 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_GFX_STANDARDSKELETON_H_ 17 #define NW_GFX_STANDARDSKELETON_H_ 18 19 #include <nw/gfx/gfx_Skeleton.h> 20 #include <nw/gfx/res/gfx_ResSkeleton.h> 21 22 namespace nw 23 { 24 namespace gfx 25 { 26 27 //--------------------------------------------------------------------------- 28 //! @brief SkeletalModel 内の階層構造を表すクラスです。 29 //! 30 //! Skeleton は StandardSkeleton に変更されました。 31 //--------------------------------------------------------------------------- 32 class StandardSkeleton : public Skeleton 33 { 34 private: 35 NW_DISALLOW_COPY_AND_ASSIGN(StandardSkeleton); 36 37 public: 38 NW_UT_RUNTIME_TYPEINFO; 39 40 //---------------------------------------- 41 //! @name 作成/破棄 42 //@{ 43 44 //! @brief スケルトンを生成します。 45 //! 46 //! @param[in] resource リソースです。 47 //! @param[in] maxCallbacks コールバックの最大数です。 48 //! @param[in] isFixedSizeMemory 固定サイズのメモリで生成するかを表すフラグです。 49 //! @param[in] poseTransforms ポーズ用のトランスフォームリストです。 50 //! @param[in] allocator アロケータです。 51 //! 52 static StandardSkeleton* Create( 53 ResSkeleton resource, 54 int maxCallbacks, 55 bool isFixedSizeMemory, 56 Skeleton::TransformPose::TransformArray poseTransforms, 57 os::IAllocator* allocator 58 ); 59 60 61 //! @brief 生成時に必要なメモリサイズを取得します。 62 //! 63 //! @param[in] resource リソースです。 64 //! @param[in] maxCallbacks コールバックの最大数です。 65 //! @param[in] alignment 計算に用いるアライメントです。2 のべき乗である必要があります。 66 static size_t GetMemorySize( 67 ResSkeleton resource, 68 int maxCallbacks, 69 size_t alignment = os::IAllocator::DEFAULT_ALIGNMENT) 70 { 71 os::MemorySizeCalculator size(alignment); 72 73 GetMemorySizeInternal(&size, resource, maxCallbacks); 74 75 return size.GetSizeWithPadding(alignment); 76 } 77 78 //! @details :private GetMemorySizeInternal(os::MemorySizeCalculator * pSize,ResSkeleton resource,int maxCallbacks)79 static void GetMemorySizeInternal( 80 os::MemorySizeCalculator* pSize, 81 ResSkeleton resource, 82 int maxCallbacks) 83 { 84 // StandardSkeleton::Create 85 os::MemorySizeCalculator& size = *pSize; 86 87 size += sizeof(StandardSkeleton); 88 #ifdef NW_MOVE_ARRAY_CACHE_LINE_ALIGNMENT_ENABLED 89 size.Add(sizeof(Skeleton::TransformPose::Transform) * resource.GetBonesCount(), Skeleton::TransformPose::TransformArray::MEMORY_ALIGNMENT); 90 size.Add(sizeof(math::MTX34) * resource.GetBonesCount(), Skeleton::TransformPose::TransformArray::MEMORY_ALIGNMENT); 91 size.Add(sizeof(math::MTX34) * resource.GetBonesCount(), Skeleton::TransformPose::TransformArray::MEMORY_ALIGNMENT); 92 #else 93 size += sizeof(Skeleton::TransformPose::Transform) * resource.GetBonesCount(); 94 size += sizeof(math::MTX34) * resource.GetBonesCount(); 95 size += sizeof(math::MTX34) * resource.GetBonesCount(); 96 #endif 97 Skeleton::GetMemorySizeForConstruct(pSize, maxCallbacks); 98 } 99 100 //@} 101 102 //---------------------------------------- 103 //! @name ポーズ 104 //@{ 105 106 //! @brief ローカルトランスフォームのポーズを取得します。 107 //! 108 //! @return ローカルトランスフォームのポーズです。 109 //! LocalTransformPose()110 virtual TransformPose& LocalTransformPose() { return m_Pose; } 111 112 //! @brief ローカルトランスフォームのポーズを取得します。 113 //! 114 //! @return ローカルトランスフォームのポーズです。 115 //! LocalTransformPose()116 virtual const TransformPose& LocalTransformPose() const { return m_Pose; } 117 118 //! @brief ワールドトランスフォームのポーズを取得します。 119 //! 120 //! @return ワールドトランスフォームのポーズです。 121 //! WorldTransformPose()122 virtual TransformPose& WorldTransformPose() { return m_WorldTransformPose; } 123 124 //! @brief ワールドトランスフォームのポーズを取得します。 125 //! 126 //! @return ワールドトランスフォームのポーズです。 127 //! WorldTransformPose()128 virtual const TransformPose& WorldTransformPose() const { return m_WorldTransformPose; } 129 130 //! @brief ワールドマトリクスのポーズを取得します。 131 //! 132 //! @return ワールドマトリクスのポーズです。 133 //! WorldMatrixPose()134 virtual MatrixPose& WorldMatrixPose() { return m_WorldMatrixPose; } 135 136 //! @brief ワールドマトリクスのポーズを取得します。 137 //! 138 //! @return ワールドマトリクスのポーズです。 139 //! WorldMatrixPose()140 virtual const MatrixPose& WorldMatrixPose() const { return m_WorldMatrixPose; } 141 142 //! @brief スキニングマトリクスのポーズを取得します。 143 //! 144 //! @return スキニングマトリクスのポーズです。 145 //! SkiningMatrixPose()146 virtual MatrixPose& SkiningMatrixPose() { return m_SkiningMatrixPose; } 147 148 //! @brief スキニングマトリクスのポーズを取得します。 149 //! 150 //! @return スキニングマトリクスのポーズです。 151 //! SkiningMatrixPose()152 virtual const MatrixPose& SkiningMatrixPose() const { return m_SkiningMatrixPose; } 153 154 //! @brief オリジナルポーズを取得します。 155 //! 156 //! @return オリジナルポーズです。 157 //! LocalOriginalPose()158 virtual OriginalPose& LocalOriginalPose() { return m_OriginalPose; } 159 160 //! @brief オリジナルポーズを取得します。 161 //! 162 //! @return オリジナルポーズです。 163 //! LocalOriginalPose()164 virtual const OriginalPose& LocalOriginalPose() const { return m_OriginalPose; } 165 166 //@} 167 168 protected: 169 //---------------------------------------- 170 //! @name コンストラクタ/デストラクタ 171 //@{ 172 173 //! コンストラクタです。 StandardSkeleton(os::IAllocator * allocator,ResSkeleton resource,int maxCallbacks,bool isFixedSizeMemory,Skeleton::TransformPose::TransformArray poseTransforms,Skeleton::TransformPose::TransformArray poseWorldTransforms,Skeleton::MatrixPose::MatrixArray poseWorldMatrices,Skeleton::MatrixPose::MatrixArray skiningMatrices)174 StandardSkeleton( 175 os::IAllocator* allocator, 176 ResSkeleton resource, 177 int maxCallbacks, 178 bool isFixedSizeMemory, 179 Skeleton::TransformPose::TransformArray poseTransforms, 180 Skeleton::TransformPose::TransformArray poseWorldTransforms, 181 Skeleton::MatrixPose::MatrixArray poseWorldMatrices, 182 Skeleton::MatrixPose::MatrixArray skiningMatrices) 183 : Skeleton(allocator, resource, maxCallbacks, isFixedSizeMemory), 184 m_Pose(poseTransforms), 185 m_WorldTransformPose(poseWorldTransforms), 186 m_WorldMatrixPose(poseWorldMatrices), 187 m_SkiningMatrixPose(skiningMatrices), 188 m_OriginalPose(resource) 189 { 190 } 191 192 //! デストラクタです。 ~StandardSkeleton()193 virtual ~StandardSkeleton() 194 {} 195 196 //@} 197 198 private: 199 TransformPose m_Pose; 200 TransformPose m_WorldTransformPose; 201 MatrixPose m_WorldMatrixPose; 202 MatrixPose m_SkiningMatrixPose; 203 OriginalPose m_OriginalPose; 204 }; 205 206 } // namespace gfx 207 } // namespace nw 208 209 #endif // NW_GFX_STANDARDSKELETON_H_ 210