/*---------------------------------------------------------------------------* Project: NintendoWare File: lyt_Types.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 26780 $ *---------------------------------------------------------------------------*/ #ifndef NW_LYT_TYPES_H_ #define NW_LYT_TYPES_H_ #include #include #include #include #include #include namespace nw { namespace lyt { //! @name リソース //@{ //! リソースの名前文字列の最大文字数です。 const int ResourceNameStrMax = 16; //! マテリアルの名前文字列の最大文字数です。 const int MaterialNameStrMax = ResourceNameStrMax + 4; //! ユーザーデータの名前文字列の最大文字数です。 const int UserDataStrMax = 8; //! テクスチャの最大数です。 const int TexMapMax = 3; //! TEVステージの最大数です。 const int TevStageMax = 6; //! マテリアルカラーの最大数です。 const int MatColorMax = 7; //@} namespace internal { //! テクスチャユニットの数です。 const int TexUnitMax = 4; //! TexEnvユニットの数です。 #ifdef NW_TARGET_CTR_GL_FINAL const int TexEnvUnitMax = 6; #else const int TexEnvUnitMax = 3; #endif template __forceinline T SetBit( T bits, int pos, bool val ) { const T mask = T(~(1 << pos)); bits &= mask; bits |= (val ? 1: 0) << pos; return bits; } template __forceinline void SetBit( T* pBits, int pos, bool val ) { const T mask = T(~(1 << pos)); *pBits &= mask; *pBits |= (val ? 1: 0) << pos; } using nw::ut::internal::TestBit; template __forceinline T SetBits( T bits, int pos, int len, T val ) { NW_ASSERT(len <= 32); const u32 MaxValue = 0xFFFFFFFFU >> (32 - len); NW_ASSERT(val <= MaxValue); const T mask = T(~(MaxValue << pos)); bits &= mask; bits |= val << pos; return bits; } template __forceinline void SetBits( T* pBits, int pos, int len, T val ) { NW_ASSERT(len <= 32); const u32 MaxValue = 0xFFFFFFFFU >> (32 - len); NW_ASSERT(val <= MaxValue); const T mask = T(~(MaxValue << pos)); *pBits &= mask; *pBits |= val << pos; } using nw::ut::internal::GetBits; template __forceinline const T* ConvertOffsToPtr(const void* baseAddress, unsigned int offset) { return reinterpret_cast( static_cast(baseAddress) + offset ); } template __forceinline T* ConvertOffsToPtr(void* baseAddress, unsigned int offset) { return reinterpret_cast( static_cast(baseAddress) + offset ); } #if 0 //#if defined(WIN32) inline u16 SwapInt(u16 val) { return u16((val << 8) | (val >> 8)); } inline s16 SwapInt(s16 val) { const u16 ret= SwapInt(*reinterpret_cast(&val)); return *reinterpret_cast(&ret); } inline u32 SwapInt(u32 val) { return (val << 24) | ((val << 8) & 0x00FF0000) | ((val >> 8) & 0x0000FF00) | (val >> 24); } inline s32 SwapInt(s32 val) { const u32 ret= SwapInt(*reinterpret_cast(&val)); return *reinterpret_cast(&ret); } template class ResNum { public: ResNum() {} // デフォルトコンストラクタ ResNum(const ResNum& other) : m_Bits(other.m_Bits) {} // コピーコンストラクタ ResNum(const T val) : m_Bits(internal::SwapInt(val)) {} // T からの構築 void operator = (const ResNum& other) { m_Bits = other.m_Bits; } // 代入演算子 operator T () const { return internal::SwapInt(m_Bits); } // T への変換演算子 void operator = (T val) { m_Bits = internal::SwapInt(val); } // T からのセット protected: T m_Bits; }; template <> class ResNum { public: ResNum() {} // デフォルトコンストラクタ ResNum(const ResNum& other) : m_Bits(other.m_Bits) {} // コピーコンストラクタ ResNum(const f32 val) // T からの構築 { union { u32 u32; f32 f32; } value; value.f32 = val; m_Bits = internal::SwapInt(value.u32); } void operator = (const ResNum& other) { m_Bits = other.m_Bits; } // 代入演算子 operator f32 () const // T への変換演算子 { union { u32 u32; f32 f32; } value; value.u32 = internal::SwapInt(m_Bits); return value.f32; } void operator = (f32 val) // T からのセット { union { u32 u32; f32 f32; } value; value.f32 = val; m_Bits = internal::SwapInt(value.u32); } protected: u32 m_Bits; }; typedef ResNum ResS16; typedef ResNum ResU16; typedef ResNum ResS32; typedef ResNum ResU32; typedef ResNum ResF32; #else // #if defined(WIN32) typedef s16 ResS16; typedef u16 ResU16; typedef s32 ResS32; typedef u32 ResU32; typedef f32 ResF32; #endif // #if defined(WIN32) } // namespace nw::lyt::internal //! @name 描画 //@{ //--------------------------------------------------------------------------- //! :private (削除予定) //! //! @brief ペインの種類です。 //! //! @since 2010/03/26 初版。 //--------------------------------------------------------------------------- enum PaneType { //! その他のペインです。 PANETYPE_OTHER, //! ヌルペインです。 PANETYPE_NULL, //! ピクチャペインです。 PANETYPE_PICTURE, //! ウィンドウペインです。 PANETYPE_WINDOW, //! テキストボックスペインです。 PANETYPE_TEXTBOX, //! バウンディングペインです。 PANETYPE_BOUNDING, //! 列挙子の総数です。 PANETYPE_MAX }; //--------------------------------------------------------------------------- //! @brief ペインの表示設定に使用します。 //! //! @date 2010/04/09 PANEFLAG_MTXCONDITION, PANEFLAG_USERMTX を追加しました。 //! @date 2010/03/26 PANEFLAG_USERALLOCATED を追加しました。 //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum PaneFlag { //! ペインを表示するかどうかのフラグです。 PANEFLAG_VISIBLE, //! 子のペインに親ペインのアルファ値が影響するかどうかのフラグです。 PANEFLAG_INFLUENCEDALPHA, //! ペインが位置調整処理の対象となるかどうかのフラグです。 PANEFLAG_LOCATIONADJUST, //! ユーザが作成したペインをあらわすフラグです。 PANEFLAG_USERALLOCATED, //! ローカルMTXの状態をあらわします(1ビット目)。 PANEFLAG_MTXCONDITION, //! ローカルMTXの状態をあらわします(2ビット目)。 PANEFLAG_MTXCONDITION_1, //! SRT 行列はユーザによって指定された値です(再計算禁止)。 PANEFLAG_USERMTX, //! グローバル行列はユーザによって指定された値です(再計算禁止)。 PANEFLAG_USERGLOBALMTX, //! 使用するビット数の合計です。 PANEFLAG_MAX, //! PANEFLAG_MTXCONDITIONのビット数です。 PANEFLAG_MTXCONDITION_LENGTH = 2 }; //--------------------------------------------------------------------------- //! @brief ペインのグローバル行列の状態を表します。 //! //! @since 2010/04/09 初版。 //--------------------------------------------------------------------------- enum MtxCondition { //! 行列は再計算が必要です。 MTXCONDITION_DIRTY, //! 行列は最新の状態で計算されています。 MTXCONDITION_CLEAN, //! 行列は最新の状態で計算されています(Location Adjust 付き)。 MTXCONDITION_CLEAN_LOCATION_ADJUST, //! 列挙子の総数です。 MTXCONDITION_MAX }; //--------------------------------------------------------------------------- //! @brief 表示の水平方向の基準位置に関する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum HorizontalPosition { //! 左を基準にします。 HORIZONTALPOSITION_LEFT, //! 中央を基準にします。 HORIZONTALPOSITION_CENTER, //! 右を基準にします。 HORIZONTALPOSITION_RIGHT, //! 列挙子の総数です。 HORIZONTALPOSITION_MAX }; //--------------------------------------------------------------------------- //! @brief 表示の垂直方向の基準位置に関する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum VerticalPosition { //! 上を基準にします。 VERTICALPOSITION_TOP, //! 中央を基準にします。 VERTICALPOSITION_CENTER, //! 下を基準にします。 VERTICALPOSITION_BOTTOM, //! 列挙子の総数です。 VERTICALPOSITION_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャフォーマットの列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TexFormat { //! L8です。 TEXFORMAT_L8, //! A8です。 TEXFORMAT_A8, //! LA4です。 TEXFORMAT_LA4, //! LA8です。 TEXFORMAT_LA8, //! HILO8です。 TEXFORMAT_HILO8, //! RGB565です。 TEXFORMAT_RGB565, //! RGB8です。 TEXFORMAT_RGB8, //! RGB5A1です。 TEXFORMAT_RGB5A1, //! RGBA4です。 TEXFORMAT_RGBA4, //! RGBA8です。 TEXFORMAT_RGBA8, //! ETC1です。 TEXFORMAT_ETC1, //! ETC1A4です。 TEXFORMAT_ETC1A4, //! L4です。 TEXFORMAT_L4, //! A4です。 TEXFORMAT_A4, //! 列挙子の総数です。 TEXFORMAT_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャのラップモードを表す列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TexWrap { //! クランプします。 TEXWRAP_CLAMP, //! 繰り返します。 TEXWRAP_REPEAT, //! ミラーします。 TEXWRAP_MIRROR, //! 列挙子の総数です。 TEXWRAP_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャフィルターのモードを表す列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TexFilter { //! NEARフィルターモードです。 TEXFILTER_NEAR, //! LINEARフィルターモードです。 TEXFILTER_LINEAR, //! 列挙子の総数です。 TEXFILTER_MAX }; //--------------------------------------------------------------------------- //! @brief Tevの演算モードを表す列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TevMode { //! REPLACEモードです。 TEVMODE_REPLACE, //! MODULATEモードです。 TEVMODE_MODULATE, //! ADDモードです。 TEVMODE_ADD, //! ADD_SIGNEDモードです。 TEVMODE_ADD_SIGNED, //! INTERPOLATEモードです。 TEVMODE_INTERPOLATE, //! SUBTRACTモードです。 TEVMODE_SUBTRACT, //! ADD_MULTモードです。 TEVMODE_ADD_MULT, //! MULT_ADDモードです。 TEVMODE_MULT_ADD, //! 列挙子の総数です。 TEVMODE_MAX }; //--------------------------------------------------------------------------- //! @brief Tevの入力のソースを表す列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TevSrc { //! TEXTURE0を使用します。 TEVSRC_TEXTURE0, //! TEXTURE1を使用します。 TEVSRC_TEXTURE1, //! TEXTURE2を使用します。 TEVSRC_TEXTURE2, //! TEXTURE3を使用します。 TEVSRC_TEXTURE3, //! CONSTANTを使用します。 TEVSRC_CONSTANT, //! PRIMARYを使用します。 TEVSRC_PRIMARY, //! 前段の出力を使用します。 TEVSRC_PREVIOUS, //! 前段のバッファを使用しますす。 TEVSRC_PREVIOUS_BUFFER, //! 列挙子の総数です。 TEVSRC_MAX }; //--------------------------------------------------------------------------- //! @brief Tevの入力のRGBのオペランドを指定する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TevOpRgb { //! RGBモードです。 TEVOPRGB_RGB, //! INV_RGBモードです。 TEVOPRGB_INV_RGB, //! ALPHAモードです。 TEVOPRGB_ALPHA, //! INV_ALPHAモードです。 TEVOPRGB_INV_ALPHA, //! RRRモードです。 TEVOPRGB_RRR, //! INV_RRRモードです。 TEVOPRGB_INV_RRR, //! GGGモードです。 TEVOPRGB_GGG, //! INV_GGGモードです。 TEVOPRGB_INV_GGG, //! BBBモードです。 TEVOPRGB_BBB, //! INV_BBBモードです。 TEVOPRGB_INV_BBB, //! 列挙子の総数です。 TEVOPRGB_MAX }; //--------------------------------------------------------------------------- //! @brief Tevの入力のアルファのオペランドを指定する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TevOpAlp { //! ALPHAモードです。 TEVOPALP_ALPHA, //! INV_ALPHAモードです。 TEVOPALP_INV_ALPHA, //! Rモードです。 TEVOPALP_R, //! INV_Rモードです。 TEVOPALP_INV_R, //! Gモードです。 TEVOPALP_G, //! INV_Gモードです。 TEVOPALP_INV_G, //! Bモードです。 TEVOPALP_B, //! INV_Bモードです。 TEVOPALP_INV_B, //! 列挙子の総数です。 TEVOPALP_MAX }; //--------------------------------------------------------------------------- //! @brief Tev出力のスケールを指定する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TevScale { //! 演算結果をそのまま出力します。 TEVSCALE_1, //! 演算結果を 2 倍にします。 TEVSCALE_2, //! 演算結果を 4 倍にします。 TEVSCALE_4, //! 列挙子の総数です。 TEVSCALE_MAX }; //--------------------------------------------------------------------------- //! @brief Tevの定数カラーレジスタにロードするカラーを指定する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TevKonstSel { //! コンバイナバッファ用カラーをロードします。 TEVKONSTSEL_BUFFER, //! コンスタントレジスタ 0 をロードします。 TEVKONSTSEL_K0, //! コンスタントレジスタ 1 をロードします。 TEVKONSTSEL_K1, //! コンスタントレジスタ 2 をロードします。 TEVKONSTSEL_K2, //! コンスタントレジスタ 3 をロードします。 TEVKONSTSEL_K3, //! コンスタントレジスタ 4 をロードします。 TEVKONSTSEL_K4, //! コンスタントレジスタ 5 をロードします。 TEVKONSTSEL_K5, //! 列挙子の総数です。 TEVKONSTSEL_MAX }; //--------------------------------------------------------------------------- //! @brief アルファテストのモードを指定する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AlphaTest { //! フラグメントは常に受け入れません。 ALPHATEST_NEVER, //! フラグメント・アルファ<参照アルファのとき受け入れます。 ALPHATEST_LESS, //! フラグメント・アルファ≦参照アルファのとき受け入れます。 ALPHATEST_LEQUAL, //! フラグメント・アルファ=参照アルファのとき受け入れます。 ALPHATEST_EQUAL, //! フラグメント・アルファ≠参照アルファのとき受け入れます。 ALPHATEST_NEQUAL, //! フラグメント・アルファ≧参照アルファのとき受け入れます。 ALPHATEST_GEQUAL, //! フラグメント・アルファ>参照アルファのとき受け入れます。 ALPHATEST_GREATER, //! フラグメントは無条件に受け入れます。 ALPHATEST_ALWAYS, //! 列挙子の総数です。 ALPHATEST_MAX }; //--------------------------------------------------------------------------- //! @brief ブレンド処理のソースへの係数です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum BlendFactorSrc { //! (0.0) です。 BLENDFACTORSRC_0, //! (1.0) です。 BLENDFACTORSRC_1, //! (ターゲット・カラー) です。 BLENDFACTORSRC_DST_COLOR, //! (1.0 - ターゲット・カラー) です。 BLENDFACTORSRC_INV_DST_COLOR, //! (ソース・アルファ) です。 BLENDFACTORSRC_SRC_ALPHA, //! (1.0 - ソース・アルファ) です。 BLENDFACTORSRC_INV_SRC_ALPHA, //! (ターゲット・アルファ) です。 BLENDFACTORSRC_DST_ALPHA, //! (1.0 - ターゲットアルファ) です。 BLENDFACTORSRC_INV_DST_ALPHA, //! 列挙子の総数です。 BLENDFACTORSRC_MAX }; //--------------------------------------------------------------------------- //! @brief ブレンド処理のターゲットへの係数です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum BlendFactorDst { //! (0.0) です。 BLENDFACTORDST_0, //! (1.0) です。 BLENDFACTORDST_1, //! (ソース・カラー) です。 BLENDFACTORDST_SRC_COLOR, //! (1.0 - ソース・カラー) です。 BLENDFACTORDST_INV_SRC_COLOR, //! (ソース・アルファ) です。 BLENDFACTORDST_SRC_ALPHA, //! (1.0 - ソース・アルファ) です。 BLENDFACTORDST_INV_SRC_ALPHA, //! (ターゲット・アルファ) です。 BLENDFACTORDST_DST_ALPHA, //! (1.0 - ターゲット・アルファ) です。 BLENDFACTORDST_INV_DST_ALPHA, //! 列挙子の総数です。 BLENDFACTORDST_MAX }; //--------------------------------------------------------------------------- //! @brief ブレンドの演算方法を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum BlendOp { //! ブレンド処理は行いません。 BLENDOP_DISABLE, //! 加算します。 BLENDOP_ADD, //! 減算します。 BLENDOP_SUBTRACT, //! 逆方向に減算します。 BLENDOP_REVERSE_SUBTRACT, //! 列挙子の総数です。 BLENDOP_MAX }; //--------------------------------------------------------------------------- //! @brief 論理演算の演算方法を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum LogicOp { //! 論理演算は行いません。 LOGICOP_DISABLE, //! 何もしません。 LOGICOP_NOOP, //! 0x00 です。 LOGICOP_CLEAR, //! 0xff です。 LOGICOP_SET, //! (ソース) です。 LOGICOP_COPY, //! (~ソース) です。 LOGICOP_INV_COPY, //! (~ターゲット) です。 LOGICOP_INV, //! (ソース & ターゲット) です。 LOGICOP_AND, //! ~(ソース & ターゲット) です。 LOGICOP_NAND, //! (ソース | ターゲット です。 LOGICOP_OR, //! ~(ソース | ターゲット) です。 LOGICOP_NOR, //! (ソース ^ ターゲット です。 LOGICOP_XOR, //! ~(ソース ^ ターゲット) です。 LOGICOP_EQUIV, //! (ソース & ~ターゲット) です。 LOGICOP_REV_AND, //! (~ソース & ターゲット) です。 LOGICOP_INV_AND, //! (ソース | ~ターゲット) です。 LOGICOP_REV_OR, //! (~ソース | ターゲット) です。 LOGICOP_INV_OR, //! 列挙子の総数です。 LOGICOP_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャ座標の生成方法を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TexGenType { //! 入力属性に関して 2X4 行列の乗算を行い、S, T テクスチャ座標を生成します。 TEXGENTYPE_MTX2x4, //! 列挙子の総数です。 TEXGENTYPE_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャ座標のソースを指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TexGenSrc { //! テクスチャ座標 0 を使います。 TEXGENSRC_TEX0, //! テクスチャ座標 1 を使います。 TEXGENSRC_TEX1, //! テクスチャ座標 2 を使います。 TEXGENSRC_TEX2, //! 列挙子の総数です。 TEXGENSRC_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャの反転表示に関する列挙子です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TextureFlip { //! そのまま表示します。 TEXTUREFLIP_NONE, //! 左右(水平方向)に反転して表示します。 TEXTUREFLIP_FLIPH, //! 上下(垂直方向)に反転して表示します。 TEXTUREFLIP_FLIPV, //! 90度回転して表示します。 TEXTUREFLIP_ROTATE90, //! 180度回転して表示します。 TEXTUREFLIP_ROTATE180, //! 270度回転して表示します。 TEXTUREFLIP_ROTATE270, //! 列挙子の総数です。 TEXTUREFLIP_MAX }; //--------------------------------------------------------------------------- //! @brief 原点位置を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum ScreenOriginType { //! レイアウトの左上隅を原点とします。 SCREENORIGINTYPE_CLASSIC, //! レイアウトの中心を原点とします。 SCREENORIGINTYPE_NORMAL, //! 列挙子の総数です。 SCREENORIGINTYPE_MAX }; //--------------------------------------------------------------------------- //! @brief TextBox の行そろえ指定です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TextAlignment { //! 水平方向の位置にあわせます。 TEXTALIGNMENT_SYNCHRONOUS, //! 左にそろえます。 TEXTALIGNMENT_LEFT, //! 中央にそろえます。 TEXTALIGNMENT_CENTER, //! 右にそろえます。 TEXTALIGNMENT_RIGHT, //! 列挙子の総数です。 TEXTALIGNMENT_MAX }; //--------------------------------------------------------------------------- //! @brief 頂点属性番号です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum VertexAttr { //! 頂点座標です。 VERTEXATTR_POS, //! 頂点カラーです。 VERTEXATTR_COLOR, //! テクスチャ座標 0 です。 VERTEXATTR_TEXCOORD0, //! テクスチャ座標 1 です。 VERTEXATTR_TEXCOORD1, //! テクスチャ座標 2 です。 VERTEXATTR_TEXCOORD2, //! 頂点インデックスです。 VERTEXATTR_VERTEX_INDEX = 0, //! 列挙子の総数です。 VERTEXATTR_MAX }; //--------------------------------------------------------------------------- //! @brief 頂点属性に要求されるサイズです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum VertexAttrSize { //! 頂点座標に要求されるサイズです。 VERTEXATTRSIZE_POS = 4, //! 頂点カラーに要求されるサイズです。 VERTEXATTRSIZE_COLOR = 4, //! テクスチャ座標に要求されるサイズです。 VERTEXATTRSIZE_TEXCOORD = 2, //! 頂点インデックスに要求されるサイズです。 VERTEXATTRSIZE_INDEX = 2 }; using nw::font::Vertex; using nw::font::VERTEX_LT; using nw::font::VERTEX_RT; using nw::font::VERTEX_LB; using nw::font::VERTEX_RB; using nw::font::VERTEX_MAX; //--------------------------------------------------------------------------- //! @brief ペインの四隅に設定された頂点カラーにアクセスするときに使用します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum VertexColor { //! 左上隅の頂点カラーです。 VERTEXCOLOR_LT, //! 右上隅の頂点カラーです。 VERTEXCOLOR_RT, //! 左下隅の頂点カラーです。 VERTEXCOLOR_LB, //! 右下隅の頂点カラーです。 VERTEXCOLOR_RB, //! 列挙子の総数です。 VERTEXCOLOR_MAX }; //--------------------------------------------------------------------------- //! @brief ウィンドウフレームを指定するときに使用します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum WindowFrame { //! 左上フレームです。 WINDOWFRAME_LT, //! 右上フレームです。 WINDOWFRAME_RT, //! 左下フレームです。 WINDOWFRAME_LB, //! 右下フレームです。 WINDOWFRAME_RB, //! 左フレームです。 WINDOWFRAME_L, //! 右フレームです。 WINDOWFRAME_R, //! 上フレームです。 WINDOWFRAME_T, //! 下フレームです。 WINDOWFRAME_B, //! 列挙子の総数です。 WINDOWFRAME_MAX }; //--------------------------------------------------------------------------- //! @brief 文字色の設定にアクセスするときに使用します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum TextColor { //! 上端の文字色です。 TEXTCOLOR_TOP, //! 下端の文字色です。 TEXTCOLOR_BOTTOM, //! 列挙子の総数です。 TEXTCOLOR_MAX }; //--------------------------------------------------------------------------- //! @brief 文字色の設定にアクセスするときに使用します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum InterpolateColor { //! 黒カラー補間色です。 INTERPOLATECOLOR_BLACK = 0, //! 白カラー補間色です。 INTERPOLATECOLOR_WHITE = 1, //! 列挙子の総数です。 INTERPOLATECOLOR_MAX }; //@} //! @name リソースアクセサ //@{ //--------------------------------------------------------------------------- //! @brief 拡張ユーザデータのデータ種別です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum ExtUserDataType { //! 文字列です。 EXTUSERDATATYPE_STRING, //! 整数配列です。 EXTUSERDATATYPE_INT, //! 浮動小数点数配列です。 EXTUSERDATATYPE_FLOAT, //! 列挙子の総数です。 EXTUSERDATATYPE_MAX }; //@} //! @name アニメーション //@{ //--------------------------------------------------------------------------- //! @brief アニメーションの対象を表します。 //! //! @sa res::AnimationContent //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimContentType { //! ペインを対象としたアニメーションです。 ANIMCONTENTTYPE_PANE, //! マテリアルを対象としたアニメーションです。 ANIMCONTENTTYPE_MATERIAL, //! 列挙子の総数です。 ANIMCONTENTTYPE_MAX }; //--------------------------------------------------------------------------- //! @brief アニメーションタグのフラグです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimTagFlag { //! ペインの子孫ペインもバインドの対象にします。 ANIMTAGFLAG_DESCENDINGBIND, //! 列挙子の総数です。 ANIMTAGFLAG_MAX }; //--------------------------------------------------------------------------- //! @brief ペインアニメーションの対象を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimTargetPane { //! 表示位置の X 座標です。 ANIMTARGET_PANE_TRANSLATEX = 0, //! 表示位置の Y 座標です。 ANIMTARGET_PANE_TRANSLATEY, //! 表示位置の Z 座標です。 ANIMTARGET_PANE_TRANSLATEZ, //! X 軸の回転量です。 ANIMTARGET_PANE_ROTATEX, //! Y 軸の回転量です。 ANIMTARGET_PANE_ROTATEY, //! Z 軸の回転量です。 ANIMTARGET_PANE_ROTATEZ, //! X 座標方向の拡大率です。 ANIMTARGET_PANE_SCALEX, //! Y 座標方向の拡大率です。 ANIMTARGET_PANE_SCALEY, //! 幅です。 ANIMTARGET_PANE_SIZEW, //! 高さです。 ANIMTARGET_PANE_SIZEH, //! 列挙子の総数です。 ANIMTARGET_PANE_MAX }; //--------------------------------------------------------------------------- //! @brief ビジビリティアニメーションの対象を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimTargetVisibility { //! ビジビリティです。 ANIMTARGET_VISIBILITY_VISIBILITY = 0, //! 列挙子の総数です。 ANIMTARGET_VISIBILITY_MAX }; //--------------------------------------------------------------------------- //! @brief ペインカラーアニメーションの対象を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimTargetPaneColor { //! 左上隅の頂点カラーの R 成分値です。 ANIMTARGET_VERTEXCOLOR_LT_R = 0, //! 左上隅の頂点カラーの G 成分値です。 ANIMTARGET_VERTEXCOLOR_LT_G, //! 左上隅の頂点カラーの B 成分値です。 ANIMTARGET_VERTEXCOLOR_LT_B, //! 左上隅の頂点カラーの A 成分値です。 ANIMTARGET_VERTEXCOLOR_LT_A, //! 右上隅の頂点カラーの R 成分値です。 ANIMTARGET_VERTEXCOLOR_RT_R, //! 右上隅の頂点カラーの G 成分値です。 ANIMTARGET_VERTEXCOLOR_RT_G, //! 右上隅の頂点カラーの B 成分値です。 ANIMTARGET_VERTEXCOLOR_RT_B, //! 右上隅の頂点カラーの A 成分値です。 ANIMTARGET_VERTEXCOLOR_RT_A, //! 左下隅の頂点カラーの R 成分値です。 ANIMTARGET_VERTEXCOLOR_LB_R, //! 左下隅の頂点カラーの G 成分値です。 ANIMTARGET_VERTEXCOLOR_LB_G, //! 左下隅の頂点カラーの B 成分値です。 ANIMTARGET_VERTEXCOLOR_LB_B, //! 左下隅の頂点カラーの A 成分値です。 ANIMTARGET_VERTEXCOLOR_LB_A, //! 右下隅の頂点カラーの R 成分値です。 ANIMTARGET_VERTEXCOLOR_RB_R, //! 右下隅の頂点カラーの G 成分値です。 ANIMTARGET_VERTEXCOLOR_RB_G, //! 右下隅の頂点カラーの B 成分値です。 ANIMTARGET_VERTEXCOLOR_RB_B, //! 右下隅の頂点カラーの A 成分値です。 ANIMTARGET_VERTEXCOLOR_RB_A, //! 列挙子の総数です。 ANIMTARGET_VERTEXCOLOR_MAX, //! ペインのアルファ値です。 ANIMTARGET_PANE_ALPHA = ANIMTARGET_VERTEXCOLOR_MAX, //! 列挙子の総数です。 ANIMTARGET_PANE_COLOR_MAX }; //--------------------------------------------------------------------------- //! @brief マテリアルカラーアニメーションの対象を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimTargetMatColor { //! コンバイナバッファの R 成分です。 ANIMTARGET_MATCOLOR_BUFFER_R = 0, //! コンバイナバッファの R 成分です。 ANIMTARGET_MATCOLOR_BUFFER_G, //! コンバイナバッファの R 成分です。 ANIMTARGET_MATCOLOR_BUFFER_B, //! コンバイナバッファの R 成分です。 ANIMTARGET_MATCOLOR_BUFFER_A, //! コンスタントレジスタ 0 の R 成分です。 ANIMTARGET_MATCOLOR_KONST0_R, //! コンスタントレジスタ 0 の G 成分です。 ANIMTARGET_MATCOLOR_KONST0_G, //! コンスタントレジスタ 0 の B 成分です。 ANIMTARGET_MATCOLOR_KONST0_B, //! コンスタントレジスタ 0 の A 成分です。 ANIMTARGET_MATCOLOR_KONST0_A, //! コンスタントレジスタ 1 の R 成分です。 ANIMTARGET_MATCOLOR_KONST1_R, //! コンスタントレジスタ 1 の G 成分です。 ANIMTARGET_MATCOLOR_KONST1_G, //! コンスタントレジスタ 1 の B 成分です。 ANIMTARGET_MATCOLOR_KONST1_B, //! コンスタントレジスタ 1 の A 成分です。 ANIMTARGET_MATCOLOR_KONST1_A, //! コンスタントレジスタ 2 の R 成分です。 ANIMTARGET_MATCOLOR_KONST2_R, //! コンスタントレジスタ 2 の G 成分です。 ANIMTARGET_MATCOLOR_KONST2_G, //! コンスタントレジスタ 2 の B 成分です。 ANIMTARGET_MATCOLOR_KONST2_B, //! コンスタントレジスタ 2 の A 成分です。 ANIMTARGET_MATCOLOR_KONST2_A, //! コンスタントレジスタ 3 の R 成分です。 ANIMTARGET_MATCOLOR_KONST3_R, //! コンスタントレジスタ 3 の G 成分です。 ANIMTARGET_MATCOLOR_KONST3_G, //! コンスタントレジスタ 3 の B 成分です。 ANIMTARGET_MATCOLOR_KONST3_B, //! コンスタントレジスタ 3 の A 成分です。 ANIMTARGET_MATCOLOR_KONST3_A, //! コンスタントレジスタ 4 の R 成分です。 ANIMTARGET_MATCOLOR_KONST4_R, //! コンスタントレジスタ 4 の G 成分です。 ANIMTARGET_MATCOLOR_KONST4_G, //! コンスタントレジスタ 4 の B 成分です。 ANIMTARGET_MATCOLOR_KONST4_B, //! コンスタントレジスタ 4 の A 成分です。 ANIMTARGET_MATCOLOR_KONST4_A, //! コンスタントレジスタ 5 の R 成分です。 ANIMTARGET_MATCOLOR_KONST5_R, //! コンスタントレジスタ 5 の G 成分です。 ANIMTARGET_MATCOLOR_KONST5_G, //! コンスタントレジスタ 5 の B 成分です。 ANIMTARGET_MATCOLOR_KONST5_B, //! コンスタントレジスタ 5 の A 成分です。 ANIMTARGET_MATCOLOR_KONST5_A, //! 列挙子の総数です。 ANIMTARGET_MATCOLOR_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャ SRT アニメーションの対象を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimTargetTexSRT { //! S 座標の移動量です。 ANIMTARGET_TEXSRT_TRANSLATES = 0, //! T 座標の移動量です。 ANIMTARGET_TEXSRT_TRANSLATET, //! 回転量です。 ANIMTARGET_TEXSRT_ROTATE, //! S 座標方向の拡大率です。 ANIMTARGET_TEXSRT_SCALES, //! T 座標方向の拡大率です。 ANIMTARGET_TEXSRT_SCALET, //! 列挙子の総数です。 ANIMTARGET_TEXSRT_MAX }; //--------------------------------------------------------------------------- //! @brief テクスチャパターンアニメーションの対象を指定します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimTargetTexPattern { //! イメージによるアニメーションです。 ANIMTARGET_TEXPATTURN_IMAGE = 0, //! 列挙子の総数です。 ANIMTARGET_TEXPATTURN_MAX }; //--------------------------------------------------------------------------- //! @brief アニメーションの計算形式です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimCurve { //! コンスタント形式です。 ANIMCURVE_CONSTANT, //! ステップ形式です。 ANIMCURVE_STEP, //! エルミート補間形式です。 ANIMCURVE_HERMITE, //! 列挙子の総数です。 ANIMCURVE_MAX }; //--------------------------------------------------------------------------- //! @brief アニメーションの計算を制御するオプションです。 //! //! @sa Layout::Animate //! @sa Pane::Animate //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- enum AnimateOpt { ANIMATEOPT_NOANIMATEINVISIBLE = 0x0001 //!< 非表示のペインの計算を省略します。 }; //@} namespace res { //--------------------------------------------------------------------------- //! @brief リソース内で2次元ベクトルを保持します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct Vec2 { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! Vec2() { } //! @brief コンストラクタです。 //! //! @param x X座標の値です。 //! @param y Y座標の値です。 //! //! @since 2009/09/18 初版。 //! Vec2(f32 x, f32 y) { this->x = x; this->y = y; } //@} //! @brief 変換オペレータです。 //! //! @since 2009/09/18 初版。 //! operator const math::VEC2() const { return math::VEC2(x, y); } //! X座標の値です。 ut::ResF32 x; //! Y座標の値です。 ut::ResF32 y; }; //--------------------------------------------------------------------------- //! @brief リソース内で3次元ベクトルを保持します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct Vec3 { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! Vec3() { } //! @brief コンストラクタです。 //! //! @param x X座標の値です。 //! @param y Y座標の値です。 //! @param z Z座標の値です。 //! //! @since 2009/09/18 初版。 //! Vec3(f32 x, f32 y, f32 z) { this->x = x; this->y = y; this->z = z; } //@} //! @brief 変換オペレータです。 //! //! @since 2009/09/18 初版。 //! operator const math::VEC3() const { return math::VEC3(x, y, z); } //! X座標の値です。 ut::ResF32 x; //! Y座標の値です。 ut::ResF32 y; //! Z座標の値です。 ut::ResF32 z; }; } // namespace nw::lyt::res //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief 幅と高さを持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct Size { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! 幅と高さを 0 に初期化します。 //! //! @since 2009/09/18 初版。 //! Size() : width(0), height(0) {} //! @brief コンストラクタです。 //! //! @details //! 指定の幅と高さで初期化します。 //! //! @param aWidth 幅です。 //! @param aHeight 高さです。 //! //! @since 2009/09/18 初版。 //! Size(f32 aWidth, f32 aHeight) : width(aWidth), height(aHeight) {} //! @brief コンストラクタです。 //! //! @details //! 設定をコピーします。 //! //! @param other コピー元です。 //! //! @since 2009/09/18 初版。 //! Size(const Size& other) : width(other.width), height(other.height) {} //@} //! 幅です。 ut::ResF32 width; //! 高さです。 ut::ResF32 height; }; //--------------------------------------------------------------------------- //! @brief 二つの Size が等しいかどうかを判定します。 //! //! @param a 比較する Size 構造体のリファレンスです。 //! @param b 比較する Size 構造体のリファレンスです。 //! //! @return //! 幅と高さが等しければ true を、等しくなければ false を返します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- inline bool operator == (const Size& a, const Size& b) { return a.width == b.width && a.height == b.height; } //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief テクスチャの幅と高さを持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct TexSize { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! 幅と高さを 0 で初期化します。 //! //! @since 2009/09/18 初版。 //! TexSize() : width(0), height(0) {} //! @brief コンストラクタです。 //! //! @details //! 指定の幅と高さで初期化します。 //! //! @param aWidth 幅です。 //! @param aHeight 高さです。 //! //! @since 2009/09/18 初版。 //! TexSize(u16 aWidth, u16 aHeight) : width(aWidth), height(aHeight) {} //! @brief コピーコンストラクタです。 //! //! @param other コピー元です。 //! //! @since 2009/09/18 初版。 //! TexSize(const TexSize& other) : width(other.width), height(other.height) {} //! @brief Size への変換演算子です。 //! //! @return Size を返します。 //! //! @since 2010/02/26 初版。 //! operator const Size() const { return Size(this->width, this->height); } //@} //! 幅です。 u16 width; //! 高さです。 u16 height; }; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief テクスチャ SRT 変換行列の構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct TexSRT { //! 平行移動です。 res::Vec2 translate; //! 回転です。 ut::ResF32 rotate; //! 拡大率です。 res::Vec2 scale; }; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief テクスチャ座標生成に設定する値を持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct TexCoordGen { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! TexCoordGen() { Set(TEXGENTYPE_MTX2x4, TEXGENSRC_TEX0); } //! @brief コンストラクタです。 //! //! @param aTexGenType テクスチャ座標の生成方法です。 //! @param aTexGenSrc テクスチャ座標のソースです。 //! //! @since 2009/09/18 初版。 //! TexCoordGen( TexGenType aTexGenType, TexGenSrc aTexGenSrc ) { Set(aTexGenType, aTexGenSrc); } //@} //---------------------------------------- //! @name 取得/設定 //@{ //! @brief テクスチャ座標生成の設定を変更します。 //! //! @param aTexGenType テクスチャ座標の生成方法です。 //! @param aTexGenSrc テクスチャ座標のソースです。 //! //! @since 2009/09/18 初版。 //! void Set( TexGenType aTexGenType, TexGenSrc aTexGenSrc ) { texGenType = aTexGenType; texGenSrc = aTexGenSrc; } //! @brief テクスチャ座標の生成方法を取得します。 //! //! @return テクスチャ座標の生成方法を返します。 //! //! @since 2009/09/18 初版。 //! TexGenType GetTexGenType() const { return TexGenType(texGenType); } //! @brief テクスチャ座標のソースを取得します。 //! //! @return テクスチャ座標のソースを返します。 //! //! @since 2009/09/18 初版。 //! TexGenSrc GetTexGenSrc() const { return TexGenSrc(texGenSrc); } //@} protected: //! @details :private //! テクスチャ座標生成のタイプです。 ut::ResU8 texGenType; //! @details :private //! テクスチャ座標生成に使用するソースです。 ut::ResU8 texGenSrc; //! @details :private //! (未使用) ut::ResU8 reserve[2]; }; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief TEV ステージの設定を持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct TevStage { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! TevStage() { Set( TEVMODE_REPLACE, TEVMODE_REPLACE, TEVSRC_PRIMARY, TEVSRC_PRIMARY, TEVSRC_PRIMARY, TEVSRC_PRIMARY, TEVSRC_PRIMARY, TEVSRC_PRIMARY, TEVOPRGB_RGB, TEVOPRGB_RGB, TEVOPRGB_RGB, TEVOPALP_ALPHA, TEVOPALP_ALPHA, TEVOPALP_ALPHA, TEVSCALE_1, TEVSCALE_1, TEVKONSTSEL_K0, TEVKONSTSEL_K0, false, false); } //@} //---------------------------------------- //! @name 取得/設定 //@{ //! @brief すべての項目を設定します。 //! //! @param combineRgb RGBの演算のタイプです。 //! @param combineAlpha アルファの演算のタイプです。 //! @param srcRgb0 RGB演算のソース 0 です。 //! @param srcRgb1 RGB演算のソース 1 です。 //! @param srcRgb2 RGB演算のソース 2 です。 //! @param srcAlpha0 アルファ演算のソース 0 です。 //! @param srcAlpha1 アルファ演算のソース 1 です。 //! @param srcAlpha2 アルファ演算のソース 2 です。 //! @param operandRgb0 RGB演算のソース 0 のオペランドです。 //! @param operandRgb1 RGB演算のソース 1 のオペランドです。 //! @param operandRgb2 RGB演算のソース 2 のオペランドです。 //! @param operandAlpha0 アルファ演算のソース 0 のオペランドです。 //! @param operandAlpha1 アルファ演算のソース 1 のオペランドです。 //! @param operandAlpha2 アルファ演算のソース 2 のオペランドです。 //! @param scaleRgb RGB演算に対するスケールです。 //! @param scaleAlpha アルファ演算に対するスケールです。 //! @param konstSelRgb RGB演算で使用する定数レジスタのソースです。 //! @param konstSelAlpha アルファ演算で使用する定数レジスタのソースです。 //! @param savePrevRgb 前段の演算結果(RGB)をバッファに保存する場合は true を指定します。 //! @param savePrevAlpha 前段の演算結果(A)をバッファに保存する場合は true を指定します。 //! //! @since 2009/09/18 初版。 //! void Set( TevMode combineRgb, TevMode combineAlpha, TevSrc srcRgb0, TevSrc srcRgb1, TevSrc srcRgb2, TevSrc srcAlpha0, TevSrc srcAlpha1, TevSrc srcAlpha2, TevOpRgb operandRgb0, TevOpRgb operandRgb1, TevOpRgb operandRgb2, TevOpAlp operandAlpha0, TevOpAlp operandAlpha1, TevOpAlp operandAlpha2, TevScale scaleRgb, TevScale scaleAlpha, TevKonstSel konstSelRgb, TevKonstSel konstSelAlpha, bool savePrevRgb, bool savePrevAlpha ) { SetCombineRgb(combineRgb); SetCombineAlpha(combineAlpha); SetSrcRgb0(srcRgb0); SetSrcRgb1(srcRgb1); SetSrcRgb2(srcRgb2); SetSrcAlpha0(srcAlpha0); SetSrcAlpha1(srcAlpha1); SetSrcAlpha2(srcAlpha2); SetOperandRgb0(operandRgb0); SetOperandRgb1(operandRgb1); SetOperandRgb2(operandRgb2); SetOperandAlpha0(operandAlpha0); SetOperandAlpha1(operandAlpha1); SetOperandAlpha2(operandAlpha2); SetScaleRgb(scaleRgb); SetScaleAlpha(scaleAlpha); SetKonstSelRgb(konstSelRgb); SetKonstSelAlpha(konstSelAlpha); SetSavePrevRgb(savePrevRgb); SetSavePrevAlpha(savePrevAlpha); } //! @brief RGBの演算のタイプを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetCombineRgb(TevMode value) { NW_ASSERT(value < TEVMODE_MAX); bits0 = internal::SetBits(u32(bits0), POS0_COMBINERGB, BITS_COMBINERGB, u32(value)); } //! @brief アルファの演算のタイプを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetCombineAlpha(TevMode value) { NW_ASSERT(value < TEVMODE_MAX); bits1 = internal::SetBits(u32(bits1), POS1_COMBINEALPHA, BITS_COMBINEALPHA, u32(value)); } //! @brief RGB演算のソース 0 を設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSrcRgb0(TevSrc value) { NW_ASSERT(value < TEVSRC_MAX); bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB0, BITS_SRCRGB, u32(value)); } //! @brief RGB演算のソース 1 を設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSrcRgb1(TevSrc value) { NW_ASSERT(value < TEVSRC_MAX); bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB1, BITS_SRCRGB, u32(value)); } //! @brief RGB演算のソース 2 を設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSrcRgb2(TevSrc value) { NW_ASSERT(value < TEVSRC_MAX); bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB2, BITS_SRCRGB, u32(value)); } //! @brief アルファ演算のソース 0 を設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSrcAlpha0(TevSrc value) { NW_ASSERT(value < TEVSRC_MAX); bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA0, BITS_SRCALPHA, u32(value)); } //! @brief アルファ演算のソース 1 を設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSrcAlpha1(TevSrc value) { NW_ASSERT(value < TEVSRC_MAX); bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA1, BITS_SRCALPHA, u32(value)); } //! @brief アルファ演算のソース 2 を設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSrcAlpha2(TevSrc value) { NW_ASSERT(value < TEVSRC_MAX); bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA2, BITS_SRCALPHA, u32(value)); } //! @brief RGB演算のソース 0 のオペランドを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetOperandRgb0(TevOpRgb value) { NW_ASSERT(value < TEVOPRGB_MAX); bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB0, BITS_OPERANDRGB, u32(value)); } //! @brief RGB演算のソース 1 のオペランドを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetOperandRgb1(TevOpRgb value) { NW_ASSERT(value < TEVOPRGB_MAX); bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB1, BITS_OPERANDRGB, u32(value)); } //! @brief RGB演算のソース 2 のオペランドを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetOperandRgb2(TevOpRgb value) { NW_ASSERT(value < TEVOPRGB_MAX); bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB2, BITS_OPERANDRGB, u32(value)); } //! @brief アルファ演算のソース 0 のオペランドを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetOperandAlpha0(TevOpAlp value) { NW_ASSERT(value < TEVOPALP_MAX); bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA0, BITS_OPERANDALPHA, u32(value)); } //! @brief アルファ演算のソース 1 のオペランドを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetOperandAlpha1(TevOpAlp value) { NW_ASSERT(value < TEVOPALP_MAX); bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA1, BITS_OPERANDALPHA, u32(value)); } //! @brief アルファ演算のソース 2 のオペランドを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetOperandAlpha2(TevOpAlp value) { NW_ASSERT(value < TEVOPALP_MAX); bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA2, BITS_OPERANDALPHA, u32(value)); } //! @brief RGB演算に対するスケールを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetScaleRgb(TevScale value) { NW_ASSERT(value < TEVSCALE_MAX); bits0 = internal::SetBits(u32(bits0), POS0_SCALERGB, BITS_SCALE, u32(value)); } //! @brief アルファ演算に対するスケールを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetScaleAlpha(TevScale value) { NW_ASSERT(value < TEVSCALE_MAX); bits1 = internal::SetBits(u32(bits1), POS1_SCALEALPHA, BITS_SCALE, u32(value)); } //! @brief RGB演算で使用する定数レジスタのソースを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetKonstSelRgb(TevKonstSel value) { NW_ASSERT(value < TEVKONSTSEL_MAX); bits2 = internal::SetBits(u32(bits2), POS2_KONSTSELRGB, BITS_KONSTSEL, u32(value)); } //! @brief アルファ演算で使用する定数レジスタのソースを設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetKonstSelAlpha(TevKonstSel value) { NW_ASSERT(value < TEVKONSTSEL_MAX); bits2 = internal::SetBits(u32(bits2), POS2_KONSTSELALPHA, BITS_KONSTSEL, u32(value)); } //! @brief 前段の演算結果(RGB)をバッファに保存するか設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSavePrevRgb(bool value) { bits0 = internal::SetBit(u32(bits0), POS0_SAVEPREVRGB, value); } //! @brief 前段の演算結果(A)をバッファに保存するか設定します。 //! //! @param value 設定する値です。 //! //! @since 2009/09/18 初版。 //! void SetSavePrevAlpha(bool value) { bits1 = internal::SetBit(u32(bits1), POS1_SAVEPREVALPHA, value); } //! @brief RGBの演算のタイプを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevMode GetCombineRgb() const { return TevMode(internal::GetBits(u32(bits0), POS0_COMBINERGB, BITS_COMBINERGB)); } //! @brief アルファの演算のタイプを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevMode GetCombineAlpha() const { return TevMode(internal::GetBits(u32(bits1), POS1_COMBINEALPHA, BITS_COMBINEALPHA)); } //! @brief RGB演算の入力 0 のソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevSrc GetSrcRgb0() const { return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB0, BITS_SRCRGB)); } //! @brief RGB演算の入力 1 のソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevSrc GetSrcRgb1() const { return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB1, BITS_SRCRGB)); } //! @brief RGB演算の入力 2 のソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevSrc GetSrcRgb2() const { return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB2, BITS_SRCRGB)); } //! @brief アルファ演算の入力 0 のソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevSrc GetSrcAlpha0() const { return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA0, BITS_SRCALPHA)); } //! @brief アルファ演算の入力 1 のソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevSrc GetSrcAlpha1() const { return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA1, BITS_SRCALPHA)); } //! @brief アルファ演算の入力 2 のソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevSrc GetSrcAlpha2() const { return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA2, BITS_SRCALPHA)); } //! @brief RGB演算の入力 0 のオペランドを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevOpRgb GetOperandRgb0() const { return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB0, BITS_OPERANDRGB)); } //! @brief RGB演算の入力 1 のオペランドを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevOpRgb GetOperandRgb1() const { return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB1, BITS_OPERANDRGB)); } //! @brief RGB演算の入力 2 のオペランドを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevOpRgb GetOperandRgb2() const { return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB2, BITS_OPERANDRGB)); } //! @brief アルファ演算の入力 0 のオペランドを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevOpAlp GetOperandAlpha0() const { return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA0, BITS_OPERANDALPHA)); } //! @brief アルファ演算の入力 1 のオペランドを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevOpAlp GetOperandAlpha1() const { return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA1, BITS_OPERANDALPHA)); } //! @brief アルファ演算の入力 2 のオペランドを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevOpAlp GetOperandAlpha2() const { return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA2, BITS_OPERANDALPHA)); } //! @brief RGB演算に対するスケールを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevScale GetScaleRgb() const { return TevScale(internal::GetBits(u32(bits0), POS0_SCALERGB, BITS_SCALE)); } //! @brief アルファ演算に対するスケールを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevScale GetScaleAlpha() const { return TevScale(internal::GetBits(u32(bits1), POS1_SCALEALPHA, BITS_SCALE)); } //! @brief RGB演算で使用する定数レジスタのソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevKonstSel GetKonstSelRgb() const { return TevKonstSel(internal::GetBits(u32(bits2), POS2_KONSTSELRGB, BITS_KONSTSEL)); } //! @brief アルファ演算で使用する定数レジスタのソースを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! TevKonstSel GetKonstSelAlpha() const { return TevKonstSel(internal::GetBits(u32(bits2), POS2_KONSTSELALPHA, BITS_KONSTSEL)); } //! @brief 前段の演算結果(RGB)をバッファに保存するかの設定を取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! bool GetSavePrevRgb() const { return internal::TestBit(u32(bits0), POS0_SAVEPREVRGB); } //! @brief 前段の演算結果(A)をバッファに保存するかの設定を取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! bool GetSavePrevAlpha() const { return internal::TestBit(u32(bits1), POS1_SAVEPREVALPHA); } //@} protected: //! @details :private ut::ResU32 bits0; //! @details :private ut::ResU32 bits1; //! @details :private ut::ResU32 bits2; //! @details :private enum Bits { BITS_COMBINERGB = 4, BITS_COMBINEALPHA = 4, BITS_SRCRGB = 4, BITS_SRCALPHA = 4, BITS_OPERANDRGB = 4, BITS_OPERANDALPHA = 4, // at least 3 BITS_SCALE = 2, BITS_KONSTSEL = 4, BITS_SAVEPREV = 1 }; //! @details :private enum Pos0 { POS0_SRCRGB0 = 0, POS0_SRCRGB1 = 4, POS0_SRCRGB2 = 8, POS0_OPERANDRGB0 = 12, POS0_OPERANDRGB1 = 16, POS0_OPERANDRGB2 = 20, POS0_COMBINERGB = 24, POS0_SCALERGB = 28, POS0_SAVEPREVRGB = 30, FIELD0_SIZE = 31 }; //! @details :private enum Pos1 { POS1_SRCALPHA0 = 0, POS1_SRCALPHA1 = 4, POS1_SRCALPHA2 = 8, POS1_OPERANDALPHA0 = 12, POS1_OPERANDALPHA1 = 16, POS1_OPERANDALPHA2 = 20, POS1_COMBINEALPHA = 24, POS1_SCALEALPHA = 28, POS1_SAVEPREVALPHA = 30, FIELD1_SIZE = 31 }; //! @details :private enum Pos2 { POS2_KONSTSELRGB = 0, POS2_KONSTSELALPHA = 4, FIELD2_SIZE = 8 }; //! @details :private static void CompileCheck(); }; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief アルファコンペアの設定を持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct AlphaCompare { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! 常に通過する設定で初期化します。 //! //! @since 2009/09/18 初版。 //! AlphaCompare() { Set(ALPHATEST_ALWAYS, 0.f); } //! @brief コンストラクタです。 //! //! @details //! 指定の設定で初期化します。 //! //! @param aFunc 比較の条件です。 //! @param aRef 比較の対象値です。 //! //! @since 2009/09/18 初版。 //! AlphaCompare( AlphaTest aFunc, f32 aRef ) { Set(aFunc, aRef); } //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief 設定を変更します //! //! @param aFunc 比較の条件です。 //! @param aRef 比較の対象値です。 //! //! @since 2009/09/18 初版。 //! void Set( AlphaTest aFunc, f32 aRef ) { NW_ASSERT(0 <= aFunc && aFunc < ALPHATEST_MAX); func = u8(aFunc); ref = aRef; } //! @brief アルファ比較の条件を取得します。 //! //! @return 設定値を返します。 //! //! @since 2009/09/18 初版。 //! AlphaTest GetFunc() const { return AlphaTest(func); } //! @brief アルファ比較の対象の値を取得します。 //! //! @return 設定値を返します。 //! //! @since 2009/09/18 初版。 //! f32 GetRef() const { return ref; } //@} protected: //! @details :private u8 func; //! @details :private ut::ResF32 ref; }; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief ブレンドモードの設定を持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct BlendMode { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! ブレンドを行わない(上書き)で初期化します。 //! //! @since 2009/09/18 初版。 //! BlendMode() { Set( BLENDOP_DISABLE, BLENDFACTORSRC_SRC_ALPHA, BLENDFACTORDST_INV_SRC_ALPHA, LOGICOP_DISABLE); } //! @brief コンストラクタです。 //! //! @details //! 指定の設定で初期化します。 //! //! @param aBlendOp ブレンド演算のタイプを指定します。 //! @param aSrcFactor ピクセルカラーに乗算する値を指定します。 //! @param aDstFactor フレームバッファカラーに乗算する値を指定します。 //! @param aLogicOp 論理演算のタイプを指定します。 //! //! @since 2009/09/18 初版。 //! BlendMode( BlendOp aBlendOp, BlendFactorSrc aSrcFactor, BlendFactorDst aDstFactor, LogicOp aLogicOp ) { Set(aBlendOp, aSrcFactor, aDstFactor, aLogicOp); } //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief 設定を変更します。 //! //! @param aBlendOp ブレンド演算のタイプを指定します。 //! @param aSrcFactor ピクセルカラーに乗算する値を指定します。 //! @param aDstFactor フレームバッファカラーに乗算する値を指定します。 //! @param aLogicOp 論理演算のタイプを指定します。 //! //! @since 2009/09/18 初版。 //! void Set( BlendOp aBlendOp, BlendFactorSrc aSrcFactor, BlendFactorDst aDstFactor, LogicOp aLogicOp ) { blendOp = u8(aBlendOp); srcFactor = u8(aSrcFactor); dstFactor = u8(aDstFactor); logicOp = u8(aLogicOp); } //! @brief ブレンド演算のタイプを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! BlendOp GetBlendOp() const { return BlendOp(blendOp); } //! @brief ピクセルカラーに乗算する値を取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! BlendFactorSrc GetSrcFactor() const { return BlendFactorSrc(srcFactor); } //! @brief フレームバッファカラーに乗算する値を取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! BlendFactorDst GetDstFactor() const { return BlendFactorDst(dstFactor); } //! @brief 論理演算のタイプを取得します。 //! //! @return 現在の設定値を返します。 //! //! @since 2009/09/18 初版。 //! LogicOp GetLogicOp() const { return LogicOp(logicOp); } //@} protected: //! @details :private ut::ResU8 blendOp; //! @details :private ut::ResU8 srcFactor; //! @details :private ut::ResU8 dstFactor; //! @details :private ut::ResU8 logicOp; }; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief ペインの各辺の拡大量を持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct InflationLRTB { ut::ResF32 l; //!< 左辺の拡大量です。 ut::ResF32 r; //!< 右辺の拡大量です。 ut::ResF32 t; //!< 上辺の拡大量です。 ut::ResF32 b; //!< 下辺の拡大量です。 }; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief ウィンドウペインのフレーム(枠)のサイズを持つ構造体です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct WindowFrameSize { ut::ResF32 l; //!< 左辺の枠の幅です。 ut::ResF32 r; //!< 右辺の枠の幅です。 ut::ResF32 t; //!< 上辺の枠の高さです。 ut::ResF32 b; //!< 下辺の枠の高さです。 }; //--------------------------------------------------------------------------- //! :category リソースアクセサ //! //! @brief 拡張ユーザデータクラスです。 //! //! @details //! 名前文字列とデータがオブジェクトに続いて格納されます。 //! //! @sa Pane //! @sa res::ExtUserDataList //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class ExtUserData { public: //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @param nameStrOffset 拡張ユーザデータの名前へのオフセットです(オブジェクト先頭から)。 //! @param dataOffset 拡張ユーザデータへのオフセットです(オブジェクト先頭から)。 //! @param num 拡張ユーザデータの個数です。 //! @param type 拡張ユーザデータのデータタイプです。 //! //! @since 2009/09/18 初版。 //! ExtUserData(u32 nameStrOffset, u32 dataOffset, u16 num, u8 type) : m_NameStrOffset(nameStrOffset), m_DataOffset(dataOffset), m_Num(num), m_Type(type), m_Padding(0) {} //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief 拡張ユーザデータの名前を取得します。 //! //! @return 拡張ユーザデータに設定されている名前を返します。 //! //! @since 2009/09/18 初版。 //! const char* GetName() const { return m_NameStrOffset ? internal::ConvertOffsToPtr(this, m_NameStrOffset): 0; } //! @brief 拡張ユーザデータの型を取得します。 //! //! @details //! 文字列、整数配列、浮動小数点数配列のいずれかになります。 //! //! @return データタイプを返します。 //! //! @since 2009/09/18 初版。 //! ExtUserDataType GetType() const { return ExtUserDataType(m_Type); } //! @brief 拡張ユーザデータの個数を取得します。 //! //! @details //! データのタイプが文字列の場合は、文字列の長さになります。 //! //! データのタイプが整数配列の場合は、配列の要素数になります。 //! //! データのタイプが浮動小数点数配列の場合は、配列の要素数になります。 //! //! @return データの個数を返します。 //! //! @since 2009/09/18 初版。 //! u16 GetNum() const { return m_Num; } //! @brief 拡張ユーザデータを文字列として取得します。 //! //! @details //! データのタイプが文字列である場合に有効です。 //! //! @return 文字列のポインタを返します。 //! //! @since 2009/09/18 初版。 //! const char* GetString() const { NW_ASSERT(GetType() == EXTUSERDATATYPE_STRING); return internal::ConvertOffsToPtr(this, m_DataOffset); } //! @brief 拡張ユーザデータを整数配列として取得します。 //! //! @details //! データのタイプが整数配列である場合に有効です。 //! //! @return ResS32配列の先頭要素のポインタを返します。 //! //! @since 2009/09/18 初版。 //! const ut::ResS32* GetIntArray() const { NW_ASSERT(GetType() == EXTUSERDATATYPE_INT); return internal::ConvertOffsToPtr(this, m_DataOffset); } //! @brief 拡張ユーザデータを浮動小数点数配列として取得します。 //! //! @details //! データのタイプが浮動小数点配列である場合に有効です。 //! //! @return ResF32配列の先頭要素のポインタを返します。 //! //! @since 2009/09/18 初版。 //! const ut::ResF32* GetFloatArray() const { NW_ASSERT(GetType() == EXTUSERDATATYPE_FLOAT); return internal::ConvertOffsToPtr(this, m_DataOffset); } //@} protected: //! @details :private //! データ名のオブジェクトの先頭を基準にしたオフセットです。 ut::ResU32 m_NameStrOffset; //! @details :private //! データのオブジェクトの先頭を基準にしたオフセットです。 ut::ResU32 m_DataOffset; //! @details :private ut::ResU16 m_Num; //! @details :private ut::ResU8 m_Type; //! @details :private ut::ResU8 m_Padding; }; //--------------------------------------------------------------------------- //! :category アニメーション //! //! @brief アニメーション区間タグで指定されるグループの情報です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct AnimationGroupRef { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! AnimationGroupRef() : flag(0) { std::memset(name, 0, sizeof(name)); std::memset(padding, 0, sizeof(padding)); } //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief グループ名を取得します。 //! //! @return グループ名を返します。 //! //! @since 2009/09/18 初版。 //! const char* GetName() const { return name; } //@} //! グループ名です。 char name[ResourceNameStrMax + 1]; //! フラグです。 ut::ResU8 flag; //! (未使用です) ut::ResU8 padding[2]; }; //--------------------------------------------------------------------------- //! :category アニメーション //! //! @brief アニメーション共有情報です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct AnimationShareInfo { //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! AnimationShareInfo() { std::memset(srcPaneName, 0, sizeof(srcPaneName)); std::memset(targetGroupName, 0, sizeof(targetGroupName)); std::memset(padding, 0, sizeof(padding)); } //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief アニメーションの共有元となるペインの名前を取得します。 //! //! @return ペインの名前を返します。 //! //! @since 2009/09/18 初版。 //! const char* GetSrcPaneName() const { return srcPaneName; } //! @brief アニメーションの共有対象となるペインが登録されているグループの名前を取得します。 //! //! @return グループの名前を返します。 //! //! @since 2009/09/18 初版。 //! const char* GetTargetGroupName() const { return targetGroupName; } //@} //! アニメーションの共有元となるペインの名前です。 char srcPaneName[ResourceNameStrMax + 1]; //! アニメーションの共有対象となるペインが登録されているグループの名前です。 char targetGroupName[ResourceNameStrMax + 1]; //! (未使用です) ut::ResU8 padding[2]; }; class AnimTransform; //--------------------------------------------------------------------------- //! :category アニメーション //! //! @brief アニメーションにインデックスを付加したアニメーションリンク情報です。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class AnimationLink { public: //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! 作成時はアニメーションと結びつけられていません。 //! //! @since 2009/09/18 初版。 //! AnimationLink() { Reset(); } //!@} //---------------------------------------- //! @name 取得/設定 //@{ //! @brief アニメーションの設定を解除します。 //! //! @since 2009/09/18 初版。 //! void Reset() { Set(0, 0, false); } //! @brief アニメーションの全ての設定を行います。 //! //! @param animTrans アニメーションへのポインタです。 //! @param idx インデックスです。 //! @param bDisable アニメーションを無効状態で関連付ける場合は true を指定します。 //! //! @since 2009/09/18 初版。 //! void Set( AnimTransform* animTrans, u16 idx, bool bDisable ) { m_AnimTrans = animTrans; m_Idx = idx; m_Disable = bDisable; } //! @brief アニメーションとインデックスを設定します。 //! //! @details //! アニメーションの有効/無効状態は変更しません。 //! //! @param animTrans アニメーションへのポインタです。 //! @param idx インデックスです。 //! //! @since 2009/09/18 初版。 //! void SetAnimTransform( AnimTransform* animTrans, u16 idx ) { m_AnimTrans = animTrans; m_Idx = idx; } //! @brief アニメーションを取得します。 //! //! @return アニメーションへのポインタを返します。 //! //! @since 2009/09/18 初版。 //! AnimTransform* GetAnimTransform() const { return m_AnimTrans; } //! @brief インデックスを取得します。 //! //! @return インデックスを返します。 //! //! @since 2009/09/18 初版。 //! u16 GetIndex() const { return m_Idx; } //@} //---------------------------------------- //! @name 有効/無効 //@{ //! @brief このアニメーションリンク情報が有効かどうかを判定します。 //! //! @return 有効であれば true を、無効であれば false を返します。 //! //! @sa SetEnable //! //! @since 2009/09/18 初版。 //! bool IsEnable() const { return ! m_Disable; } //! @brief このアニメーションリンク情報を有効または無効にします。 //! //! @param bEnable 有効にする場合は true を指定します。 //! //! @sa IsEnable //! //! @since 2009/09/18 初版。 //! void SetEnable(bool bEnable) { m_Disable = ! bEnable; } //@} //! :private //! @brief リンク情報です。 ut::LinkListNode m_Link; protected: //! @details :private AnimTransform* m_AnimTrans; //! @details :private u16 m_Idx; //! @details :private bool m_Disable; }; //! @name アニメーション //@{ //! @brief アニメーションリンク情報の一覧を保持するリストの定義です。 //! //! @since 2009/09/18 初版。 //! typedef ut::LinkList AnimationList; //@} //--------------------------------------------------------------------------- //! :category リソースアクセサ //! //! @brief テクスチャ情報を保持するクラスです。 //! //! @sa ResourceAccessor //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class TextureInfo { public: //! 無効なテクスチャを表します。 static const u32 INVALID = 0; //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! 無効なテクスチャオブジェクトへのハンドル (0) とサイズ (0, 0) で初期化します。 //! //! @since 2009/09/18 初版。 //! TextureInfo() : m_TexObject(INVALID) , m_PhysicalAddress(NULL) { } //! @brief コピーコンストラクタです。 //! //! @param src コピー元です。 //! //! @since 2009/09/18 初版。 //! TextureInfo(const TextureInfo& src) { this->Set(src); } //! @brief コンストラクタです。 //! //! @details //! テクスチャイメージの一部を利用する場合に使用します。 //! realSize の幅と高さは2のべき乗でなければなりません。 //! //! テクスチャイメージはデバイスメモリに置かれなければなりません。 //! //! texObject は通常描画で使用されます。 //! //! physicalAddress は Drawer の描画で使用されます。 //! //! @param texObject テクスチャオブジェクトのハンドルです。 //! @param physicalAddress テクスチャイメージの物理アドレスです。 //! @param size 利用エリアのサイズ (幅, 高さ) です。 //! @param realSize テクスチャのサイズ (幅, 高さ) です。 //! @param format テクスチャのフォーマットです。 //! //! @date 2010/05/14 physicalAddress 引数を追加しました。 //! @date 2010/04/23 format 引数を追加しました。 //! @since 2009/09/18 初版。 //! TextureInfo( u32 texObject, uptr physicalAddress, const TexSize& size, const TexSize& realSize, TexFormat format) { this->Set(texObject, physicalAddress, size, realSize, format); } //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief テクスチャの情報を設定します。 //! //! @details //! すべての設定をコピーします。 //! //! @param src コピー元です。 //! //! @since 2009/09/18 初版。 //! void Set(const TextureInfo& src) { *this = src; } //! @brief テクスチャの情報を設定します。 //! //! @details //! 指定の値を設定します。 //! //! テクスチャイメージの一部を利用する場合に使用します。 //! realSize の幅と高さは2のべき乗でなければなりません。 //! //! テクスチャイメージはデバイスメモリに置かれなければなりません。 //! //! texObject は通常描画で使用されます。 //! //! physicalAddress は Drawer の描画で使用されます。 //! //! @param texObject テクスチャオブジェクトのハンドルです。 //! @param physicalAddress テクスチャイメージの物理アドレスです。 //! @param size 利用エリアのサイズ (幅, 高さ) です。 //! @param realSize テクスチャのサイズ (幅, 高さ) です。 //! @param format テクスチャのフォーマットです。 //! //! @date 2010/05/14 physicalAddress 引数を追加しました。 //! @date 2010/04/23 format 引数を追加しました。 //! @since 2009/09/18 初版。 //! void Set( u32 texObject, uptr physicalAddress, const TexSize& size, const TexSize& realSize, TexFormat format) { NW_ASSERT(IsPowerOfTwo(realSize.width)); NW_ASSERT(IsPowerOfTwo(realSize.height)); m_TexObject = texObject; m_PhysicalAddress = physicalAddress; m_Size = size; m_RealSize = realSize; m_Format = format; } //! @brief テクスチャオブジェクトを取得します。 //! //! @return テクスチャオブジェクトへのハンドルを返します。 //! //! @since 2009/09/18 初版。 //! u32 GetTextureObject() const { return m_TexObject; } //! @brief テクスチャの利用領域のサイズ (幅, 高さ) を取得します。 //! //! @return テクスチャの利用領域のサイズ (幅, 高さ) を返します。 //! //! @since 2009/09/18 初版。 //! const TexSize& GetSize() const { return m_Size; } //! @brief テクスチャのサイズ (幅, 高さ) を取得します。 //! //! @details //! テクスチャのサイズは幅、高さそれぞれ2のべき乗です。 //! //! @return テクスチャのサイズ (幅, 高さ) を返します。 //! //! @since 2009/09/18 初版。 //! const TexSize& GetRealSize() const { return m_RealSize; } //! @brief テクスチャの物理アドレスを取得します。 //! //! @return テクスチャの物理アドレスを返します。 //! //! @since 2010/05/14 初版。GetTextureImage()を置き換えました。 //! uptr GetPhysicalAddress() const { return m_PhysicalAddress; } //! @brief テクスチャフォーマットを取得します。 //! //! @return テクスチャフォーマットを返します。 //! //! @since 2010/04/23 初版。 //! TexFormat GetFormat() const { return TexFormat(m_Format); } //! @brief テクスチャが有効か調べます。 //! //! @return テクスチャが有効な場合には true を返します。 //! //! @since 2010/07/16 初版。 //! bool IsValid() const { #ifdef NW_PLATFORM_CTR return m_PhysicalAddress != 0; #else return m_TexObject != INVALID; #endif } //@} protected: //! @details :private //! value が 2 のべき数であれば true を返す。 static bool IsPowerOfTwo(u32 value) { return (value & ~(value - 1)) == value; } protected: //! @details :private u32 m_TexObject; //! @details :private uptr m_PhysicalAddress; //! @details :private TexSize m_Size; //! @details :private TexSize m_RealSize; //! @details :private u8 m_Format; }; //! @name 描画 //@{ //! @brief ペインの四隅のテクスチャ座標を保持する配列の定義です。 typedef nw::math::VEC2 TexCoordQuad[VERTEX_MAX]; //@} //! @name リソースアクセサ //@{ //! 登録したフォントを表します。 typedef const void* FontKey; //! 登録したテクスチャを表します。 typedef const void* TextureKey; //@} } // namespace nw::lyt } // namespace nw #endif // NW_LYT_TYPES_H_