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: 25986 $ 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 static size_t GetMemorySize( 66 ResSkeleton resource, 67 int maxCallbacks, 68 size_t alignment = os::IAllocator::DEFAULT_ALIGNMENT) 69 { 70 os::MemorySizeCalculator size(alignment); 71 72 GetMemorySizeInternal(&size, resource, maxCallbacks); 73 74 return size.GetSizeWithPadding(alignment); 75 } 76 77 //! @details :private GetMemorySizeInternal(os::MemorySizeCalculator * pSize,ResSkeleton resource,int maxCallbacks)78 static void GetMemorySizeInternal( 79 os::MemorySizeCalculator* pSize, 80 ResSkeleton resource, 81 int maxCallbacks) 82 { 83 // StandardSkeleton::Create 84 os::MemorySizeCalculator& size = *pSize; 85 86 size += sizeof(StandardSkeleton); 87 #ifdef NW_MOVE_ARRAY_CACHE_LINE_ALIGNMENT_ENABLED 88 size.Add(sizeof(Skeleton::TransformPose::Transform) * resource.GetBonesCount(), Skeleton::TransformPose::TransformArray::MEMORY_ALIGNMENT); 89 size.Add(sizeof(math::MTX34) * resource.GetBonesCount(), Skeleton::TransformPose::TransformArray::MEMORY_ALIGNMENT); 90 size.Add(sizeof(math::MTX34) * resource.GetBonesCount(), Skeleton::TransformPose::TransformArray::MEMORY_ALIGNMENT); 91 #else 92 size += sizeof(Skeleton::TransformPose::Transform) * resource.GetBonesCount(); 93 size += sizeof(math::MTX34) * resource.GetBonesCount(); 94 size += sizeof(math::MTX34) * resource.GetBonesCount(); 95 #endif 96 Skeleton::GetMemorySizeForConstruct(pSize, maxCallbacks); 97 } 98 99 //@} 100 101 //---------------------------------------- 102 //! @name ポーズ 103 //@{ 104 105 //! @brief ローカルトランスフォームのポーズを取得します。 106 //! 107 //! @return ローカルトランスフォームのポーズです。 108 //! LocalTransformPose()109 virtual TransformPose& LocalTransformPose() { return m_Pose; } 110 111 //! @brief ローカルトランスフォームのポーズを取得します。 112 //! 113 //! @return ローカルトランスフォームのポーズです。 114 //! LocalTransformPose()115 virtual const TransformPose& LocalTransformPose() const { return m_Pose; } 116 117 //! @brief ワールドトランスフォームのポーズを取得します。 118 //! 119 //! @return ワールドトランスフォームのポーズです。 120 //! WorldTransformPose()121 virtual TransformPose& WorldTransformPose() { return m_WorldTransformPose; } 122 123 //! @brief ワールドトランスフォームのポーズを取得します。 124 //! 125 //! @return ワールドトランスフォームのポーズです。 126 //! WorldTransformPose()127 virtual const TransformPose& WorldTransformPose() const { return m_WorldTransformPose; } 128 129 //! @brief ワールドマトリクスのポーズを取得します。 130 //! 131 //! @return ワールドマトリクスのポーズです。 132 //! WorldMatrixPose()133 virtual MatrixPose& WorldMatrixPose() { return m_WorldMatrixPose; } 134 135 //! @brief ワールドマトリクスのポーズを取得します。 136 //! 137 //! @return ワールドマトリクスのポーズです。 138 //! WorldMatrixPose()139 virtual const MatrixPose& WorldMatrixPose() const { return m_WorldMatrixPose; } 140 141 //! @brief スキニングマトリクスのポーズを取得します。 142 //! 143 //! @return スキニングマトリクスのポーズです。 144 //! SkiningMatrixPose()145 virtual MatrixPose& SkiningMatrixPose() { return m_SkiningMatrixPose; } 146 147 //! @brief スキニングマトリクスのポーズを取得します。 148 //! 149 //! @return スキニングマトリクスのポーズです。 150 //! SkiningMatrixPose()151 virtual const MatrixPose& SkiningMatrixPose() const { return m_SkiningMatrixPose; } 152 153 //! @brief オリジナルポーズを取得します。 154 //! 155 //! @return オリジナルポーズです。 156 //! LocalOriginalPose()157 virtual OriginalPose& LocalOriginalPose() { return m_OriginalPose; } 158 159 //! @brief オリジナルポーズを取得します。 160 //! 161 //! @return オリジナルポーズです。 162 //! LocalOriginalPose()163 virtual const OriginalPose& LocalOriginalPose() const { return m_OriginalPose; } 164 165 //@} 166 167 protected: 168 //---------------------------------------- 169 //! @name コンストラクタ/デストラクタ 170 //@{ 171 172 //! コンストラクタです。 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)173 StandardSkeleton( 174 os::IAllocator* allocator, 175 ResSkeleton resource, 176 int maxCallbacks, 177 bool isFixedSizeMemory, 178 Skeleton::TransformPose::TransformArray poseTransforms, 179 Skeleton::TransformPose::TransformArray poseWorldTransforms, 180 Skeleton::MatrixPose::MatrixArray poseWorldMatrices, 181 Skeleton::MatrixPose::MatrixArray skiningMatrices) 182 : Skeleton(allocator, resource, maxCallbacks, isFixedSizeMemory), 183 m_Pose(poseTransforms), 184 m_WorldTransformPose(poseWorldTransforms), 185 m_WorldMatrixPose(poseWorldMatrices), 186 m_SkiningMatrixPose(skiningMatrices), 187 m_OriginalPose(resource) 188 { 189 } 190 191 //! デストラクタです。 ~StandardSkeleton()192 virtual ~StandardSkeleton() 193 {} 194 195 //@} 196 197 private: 198 TransformPose m_Pose; 199 TransformPose m_WorldTransformPose; 200 MatrixPose m_WorldMatrixPose; 201 MatrixPose m_SkiningMatrixPose; 202 OriginalPose m_OriginalPose; 203 }; 204 205 } // namespace gfx 206 } // namespace nw 207 208 #endif // NW_GFX_STANDARDSKELETON_H_ 209