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