1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     lyt_Types.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: 25169 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NW_LYT_TYPES_H_
17 #define NW_LYT_TYPES_H_
18 
19 #include <cstddef>
20 #include <nw/types.h>
21 
22 #include <nw/math/math_Types.h>
23 #include <nw/ut/ut_BinaryFileFormat.h>
24 #include <nw/ut/ut_LinkList.h>
25 #include <nw/font/font_DrawerTypes.h>
26 
27 namespace nw
28 {
29 namespace lyt
30 {
31 
32 //! @name リソース
33 //@{
34 
35 //! リソースの名前文字列の最大文字数です。
36 const   int     ResourceNameStrMax  = 16;
37 //! マテリアルの名前文字列の最大文字数です。
38 const   int     MaterialNameStrMax  = ResourceNameStrMax + 4;
39 //! ユーザーデータの名前文字列の最大文字数です。
40 const   int     UserDataStrMax      = 8;
41 //! テクスチャの最大数です。
42 const   int     TexMapMax           = 3;
43 //! TEVステージの最大数です。
44 const   int     TevStageMax         = 6;
45 //! マテリアルカラーの最大数です。
46 const   int     MatColorMax         = 7;
47 
48 //@}
49 
50 namespace internal
51 {
52 
53 //! テクスチャユニットの数です。
54 const   int     TexUnitMax          = 4;
55 //! TexEnvユニットの数です。
56 #ifdef NW_TARGET_CTR_GL_FINAL
57 const   int     TexEnvUnitMax       = 6;
58 #else
59 const   int     TexEnvUnitMax       = 3;
60 #endif
61 
62 template <typename T>
63 __forceinline
64 T
SetBit(T bits,int pos,bool val)65 SetBit(
66     T       bits,
67     int     pos,
68     bool    val
69 )
70 {
71     const T mask = T(~(1 << pos));
72 
73     bits &= mask;
74     bits |= (val ? 1: 0) << pos;
75 
76     return bits;
77 }
78 
79 template <typename T>
80 __forceinline
81 void
SetBit(T * pBits,int pos,bool val)82 SetBit(
83     T*      pBits,
84     int     pos,
85     bool    val
86 )
87 {
88     const T mask = T(~(1 << pos));
89 
90     *pBits &= mask;
91     *pBits |= (val ? 1: 0) << pos;
92 }
93 
94 using nw::ut::internal::TestBit;
95 
96 template <typename T>
97 __forceinline
98 T
SetBits(T bits,int pos,int len,T val)99 SetBits(
100     T       bits,
101     int     pos,
102     int     len,
103     T       val
104 )
105 {
106     NW_ASSERT(len <= 32);
107     const u32 MaxValue = 0xFFFFFFFFU >> (32 - len);
108     NW_ASSERT(val <= MaxValue);
109 
110     const T mask = T(~(MaxValue << pos));
111 
112     bits &= mask;
113     bits |= val << pos;
114 
115     return bits;
116 }
117 
118 template <typename T>
119 __forceinline
120 void
SetBits(T * pBits,int pos,int len,T val)121 SetBits(
122     T*      pBits,
123     int     pos,
124     int     len,
125     T       val
126 )
127 {
128     NW_ASSERT(len <= 32);
129     const u32 MaxValue = 0xFFFFFFFFU >> (32 - len);
130     NW_ASSERT(val <= MaxValue);
131 
132     const T mask = T(~(MaxValue << pos));
133 
134     *pBits &= mask;
135     *pBits |= val << pos;
136 }
137 
138 using nw::ut::internal::GetBits;
139 
140 template<typename T>
141 __forceinline
142 const T*
ConvertOffsToPtr(const void * baseAddress,unsigned int offset)143 ConvertOffsToPtr(const void* baseAddress, unsigned int offset)
144 {
145     return
146         reinterpret_cast<const T*>(
147             static_cast<const u8*>(baseAddress) + offset
148         );
149 }
150 
151 template<typename T>
152 __forceinline
153 T*
ConvertOffsToPtr(void * baseAddress,unsigned int offset)154 ConvertOffsToPtr(void* baseAddress, unsigned int offset)
155 {
156     return
157         reinterpret_cast<T*>(
158             static_cast<u8*>(baseAddress) + offset
159         );
160 }
161 
162 #if 0
163 //#if defined(WIN32)
164 
165 inline
166 u16
167 SwapInt(u16 val)
168 {
169     return u16((val << 8) | (val >> 8));
170 }
171 
172 inline
173 s16
174 SwapInt(s16 val)
175 {
176     const u16 ret= SwapInt(*reinterpret_cast<const u16*>(&val));
177     return *reinterpret_cast<const s16*>(&ret);
178 }
179 
180 inline
181 u32
182 SwapInt(u32 val)
183 {
184     return (val << 24) | ((val << 8) & 0x00FF0000) | ((val >> 8) & 0x0000FF00) | (val >> 24);
185 }
186 
187 inline
188 s32
189 SwapInt(s32 val)
190 {
191     const u32 ret= SwapInt(*reinterpret_cast<const u32*>(&val));
192     return *reinterpret_cast<const s32*>(&ret);
193 }
194 
195 template<typename T>
196 class ResNum
197 {
198 public:
199             ResNum() {}                                                             // デフォルトコンストラクタ
200 
201             ResNum(const ResNum& other) : m_Bits(other.m_Bits) {}                       // コピーコンストラクタ
202 
203             ResNum(const T val)         : m_Bits(internal::SwapInt(val)) {}             // T からの構築
204 
205     void    operator = (const ResNum& other)    { m_Bits = other.m_Bits; }              // 代入演算子
206 
207             operator T () const                 { return internal::SwapInt(m_Bits); }   // T への変換演算子
208 
209     void    operator = (T val)                  { m_Bits = internal::SwapInt(val);  }   // T からのセット
210 
211 private:
212     T       m_Bits;
213 };
214 
215 template <>
216 class ResNum<f32>
217 {
218 public:
219             ResNum() {}                                                         // デフォルトコンストラクタ
220 
221             ResNum(const ResNum& other) : m_Bits(other.m_Bits) {}                   // コピーコンストラクタ
222 
223             ResNum(const f32 val)                                               // T からの構築
224             {
225                 union {
226                     u32 u32;
227                     f32 f32;
228                 } value;
229                 value.f32 = val;
230                 m_Bits = internal::SwapInt(value.u32);
231             }
232 
233     void    operator = (const ResNum& other)    { m_Bits = other.m_Bits; }          // 代入演算子
234 
235             operator f32 () const                                               // T への変換演算子
236             {
237                 union {
238                     u32 u32;
239                     f32 f32;
240                 } value;
241                 value.u32 = internal::SwapInt(m_Bits);
242                 return value.f32;
243             }
244 
245     void    operator = (f32 val)                                                // T からのセット
246             {
247                 union {
248                     u32 u32;
249                     f32 f32;
250                 } value;
251                 value.f32 = val;
252                 m_Bits = internal::SwapInt(value.u32);
253             }
254 
255 private:
256     u32    m_Bits;
257 };
258 
259 typedef ResNum<s16> ResS16;
260 typedef ResNum<u16> ResU16;
261 typedef ResNum<s32> ResS32;
262 typedef ResNum<u32> ResU32;
263 typedef ResNum<f32> ResF32;
264 
265 #else // #if defined(WIN32)
266 
267 typedef s16         ResS16;
268 typedef u16         ResU16;
269 typedef s32         ResS32;
270 typedef u32         ResU32;
271 typedef f32         ResF32;
272 
273 #endif // #if defined(WIN32)
274 
275 } // namespace nw::lyt::internal
276 
277 //! @name 描画
278 //@{
279 
280 //---------------------------------------------------------------------------
281 //! :private (削除予定)
282 //!
283 //! @brief ペインの種類です。
284 //!
285 //! @since 2010/03/26 初版。
286 //---------------------------------------------------------------------------
287 enum PaneType
288 {
289     //! その他のペインです。
290     PANETYPE_OTHER,
291     //! ヌルペインです。
292     PANETYPE_NULL,
293     //! ピクチャペインです。
294     PANETYPE_PICTURE,
295     //! ウィンドウペインです。
296     PANETYPE_WINDOW,
297     //! テキストボックスペインです。
298     PANETYPE_TEXTBOX,
299     //! バウンディングペインです。
300     PANETYPE_BOUNDING,
301 
302     //! 列挙子の総数です。
303     PANETYPE_MAX
304 };
305 
306 //---------------------------------------------------------------------------
307 //! @brief ペインの表示設定に使用します。
308 //!
309 //! @date 2010/04/09 PANEFLAG_MTXCONDITION, PANEFLAG_USERMTX を追加しました。
310 //! @date 2010/03/26 PANEFLAG_USERALLOCATED を追加しました。
311 //! @since 2009/09/18 初版。
312 //---------------------------------------------------------------------------
313 enum PaneFlag
314 {
315     //! ペインを表示するかどうかのフラグです。
316     PANEFLAG_VISIBLE,
317     //! 子のペインに親ペインのアルファ値が影響するかどうかのフラグです。
318     PANEFLAG_INFLUENCEDALPHA,
319     //! ペインが位置調整処理の対象となるかどうかのフラグです。
320     PANEFLAG_LOCATIONADJUST,
321     //! ユーザが作成したペインをあらわすフラグです。
322     PANEFLAG_USERALLOCATED,
323     //! ローカルMTXの状態をあらわします(1ビット目)。
324     PANEFLAG_MTXCONDITION,
325     //! ローカルMTXの状態をあらわします(2ビット目)。
326     PANEFLAG_MTXCONDITION_1,
327     //! SRT 行列はユーザによって指定された値です(再計算禁止)。
328     PANEFLAG_USERMTX,
329     //! グローバル行列はユーザによって指定された値です(再計算禁止)。
330     PANEFLAG_USERGLOBALMTX,
331 
332     //! 使用するビット数の合計です。
333     PANEFLAG_MAX,
334 
335     //! PANEFLAG_MTXCONDITIONのビット数です。
336     PANEFLAG_MTXCONDITION_LENGTH = 2
337 };
338 
339 //---------------------------------------------------------------------------
340 //! @brief ペインのグローバル行列の状態を表します。
341 //!
342 //! @since 2010/04/09 初版。
343 //---------------------------------------------------------------------------
344 enum MtxCondition
345 {
346     //! 行列は再計算が必要です。
347     MTXCONDITION_DIRTY,
348     //! 行列は最新の状態で計算されています。
349     MTXCONDITION_CLEAN,
350     //! 行列は最新の状態で計算されています(Location Adjust 付き)。
351     MTXCONDITION_CLEAN_LOCATION_ADJUST,
352 
353     //! 列挙子の総数です。
354     MTXCONDITION_MAX
355 };
356 
357 //---------------------------------------------------------------------------
358 //! @brief 表示の水平方向の基準位置に関する列挙子です。
359 //!
360 //! @since 2009/09/18 初版。
361 //---------------------------------------------------------------------------
362 enum HorizontalPosition
363 {
364     //! 左を基準にします。
365     HORIZONTALPOSITION_LEFT,
366     //! 中央を基準にします。
367     HORIZONTALPOSITION_CENTER,
368     //! 右を基準にします。
369     HORIZONTALPOSITION_RIGHT,
370 
371     //! 列挙子の総数です。
372     HORIZONTALPOSITION_MAX
373 };
374 
375 //---------------------------------------------------------------------------
376 //! @brief  	表示の垂直方向の基準位置に関する列挙子です。
377 //!
378 //! @since 2009/09/18 初版。
379 //---------------------------------------------------------------------------
380 enum VerticalPosition
381 {
382     //! 上を基準にします。
383     VERTICALPOSITION_TOP,
384     //! 中央を基準にします。
385     VERTICALPOSITION_CENTER,
386     //! 下を基準にします。
387     VERTICALPOSITION_BOTTOM,
388 
389     //! 列挙子の総数です。
390     VERTICALPOSITION_MAX
391 };
392 
393 //---------------------------------------------------------------------------
394 //! @brief テクスチャフォーマットの列挙子です。
395 //!
396 //! @since 2009/09/18 初版。
397 //---------------------------------------------------------------------------
398 enum TexFormat
399 {
400     //! L8です。
401     TEXFORMAT_L8,
402     //! A8です。
403     TEXFORMAT_A8,
404     //! LA4です。
405     TEXFORMAT_LA4,
406     //! LA8です。
407     TEXFORMAT_LA8,
408     //! HILO8です。
409     TEXFORMAT_HILO8,
410     //! RGB565です。
411     TEXFORMAT_RGB565,
412     //! RGB8です。
413     TEXFORMAT_RGB8,
414     //! RGB5A1です。
415     TEXFORMAT_RGB5A1,
416     //! RGBA4です。
417     TEXFORMAT_RGBA4,
418     //! RGBA8です。
419     TEXFORMAT_RGBA8,
420     //! ETC1です。
421     TEXFORMAT_ETC1,
422     //! ETC1A4です。
423     TEXFORMAT_ETC1A4,
424     //! L4です。
425     TEXFORMAT_L4,
426     //! A4です。
427     TEXFORMAT_A4,
428 
429     //! 列挙子の総数です。
430     TEXFORMAT_MAX
431 };
432 
433 //---------------------------------------------------------------------------
434 //! @brief テクスチャのラップモードを表す列挙子です。
435 //!
436 //! @since 2009/09/18 初版。
437 //---------------------------------------------------------------------------
438 enum TexWrap
439 {
440     //! クランプします。
441     TEXWRAP_CLAMP,
442     //! 繰り返します。
443     TEXWRAP_REPEAT,
444     //! ミラーします。
445     TEXWRAP_MIRROR,
446 
447     //! 列挙子の総数です。
448     TEXWRAP_MAX
449 };
450 
451 //---------------------------------------------------------------------------
452 //! @brief テクスチャフィルターのモードを表す列挙子です。
453 //!
454 //! @since 2009/09/18 初版。
455 //---------------------------------------------------------------------------
456 enum TexFilter
457 {
458     //! NEARフィルターモードです。
459     TEXFILTER_NEAR,
460     //! LINEARフィルターモードです。
461     TEXFILTER_LINEAR,
462 
463     //! 列挙子の総数です。
464     TEXFILTER_MAX
465 };
466 
467 //---------------------------------------------------------------------------
468 //! @brief Tevの演算モードを表す列挙子です。
469 //!
470 //! @since 2009/09/18 初版。
471 //---------------------------------------------------------------------------
472 enum TevMode
473 {
474     //! REPLACEモードです。
475     TEVMODE_REPLACE,
476     //! MODULATEモードです。
477     TEVMODE_MODULATE,
478     //! ADDモードです。
479     TEVMODE_ADD,
480     //! ADD_SIGNEDモードです。
481     TEVMODE_ADD_SIGNED,
482     //! INTERPOLATEモードです。
483     TEVMODE_INTERPOLATE,
484     //! SUBTRACTモードです。
485     TEVMODE_SUBTRACT,
486     //! ADD_MULTモードです。
487     TEVMODE_ADD_MULT,
488     //! MULT_ADDモードです。
489     TEVMODE_MULT_ADD,
490 
491     //! 列挙子の総数です。
492     TEVMODE_MAX
493 };
494 
495 //---------------------------------------------------------------------------
496 //! @brief Tevの入力のソースを表す列挙子です。
497 //!
498 //! @since 2009/09/18 初版。
499 //---------------------------------------------------------------------------
500 enum TevSrc
501 {
502     //! TEXTURE0を使用します。
503     TEVSRC_TEXTURE0,
504     //! TEXTURE1を使用します。
505     TEVSRC_TEXTURE1,
506     //! TEXTURE2を使用します。
507     TEVSRC_TEXTURE2,
508     //! TEXTURE3を使用します。
509     TEVSRC_TEXTURE3,
510     //! CONSTANTを使用します。
511     TEVSRC_CONSTANT,
512     //! PRIMARYを使用します。
513     TEVSRC_PRIMARY,
514     //! 前段の出力を使用します。
515     TEVSRC_PREVIOUS,
516     //! 前段のバッファを使用しますす。
517     TEVSRC_PREVIOUS_BUFFER,
518 
519     //! 列挙子の総数です。
520     TEVSRC_MAX
521 };
522 
523 //---------------------------------------------------------------------------
524 //! @brief Tevの入力のRGBのオペランドを指定する列挙子です。
525 //!
526 //! @since 2009/09/18 初版。
527 //---------------------------------------------------------------------------
528 enum TevOpRgb
529 {
530     //! RGBモードです。
531     TEVOPRGB_RGB,
532     //! INV_RGBモードです。
533     TEVOPRGB_INV_RGB,
534     //! ALPHAモードです。
535     TEVOPRGB_ALPHA,
536     //! INV_ALPHAモードです。
537     TEVOPRGB_INV_ALPHA,
538     //! RRRモードです。
539     TEVOPRGB_RRR,
540     //! INV_RRRモードです。
541     TEVOPRGB_INV_RRR,
542     //! GGGモードです。
543     TEVOPRGB_GGG,
544     //! INV_GGGモードです。
545     TEVOPRGB_INV_GGG,
546     //! BBBモードです。
547     TEVOPRGB_BBB,
548     //! INV_BBBモードです。
549     TEVOPRGB_INV_BBB,
550 
551     //! 列挙子の総数です。
552     TEVOPRGB_MAX
553 };
554 
555 //---------------------------------------------------------------------------
556 //! @brief Tevの入力のアルファのオペランドを指定する列挙子です。
557 //!
558 //! @since 2009/09/18 初版。
559 //---------------------------------------------------------------------------
560 enum TevOpAlp
561 {
562     //! ALPHAモードです。
563     TEVOPALP_ALPHA,
564     //! INV_ALPHAモードです。
565     TEVOPALP_INV_ALPHA,
566     //! Rモードです。
567     TEVOPALP_R,
568     //! INV_Rモードです。
569     TEVOPALP_INV_R,
570     //! Gモードです。
571     TEVOPALP_G,
572     //! INV_Gモードです。
573     TEVOPALP_INV_G,
574     //! Bモードです。
575     TEVOPALP_B,
576     //! INV_Bモードです。
577     TEVOPALP_INV_B,
578 
579     //! 列挙子の総数です。
580     TEVOPALP_MAX
581 };
582 
583 //---------------------------------------------------------------------------
584 //! @brief Tev出力のスケールを指定する列挙子です。
585 //!
586 //! @since 2009/09/18 初版。
587 //---------------------------------------------------------------------------
588 enum TevScale
589 {
590     //! 演算結果をそのまま出力します。
591     TEVSCALE_1,
592     //! 演算結果を 2 倍にします。
593     TEVSCALE_2,
594     //! 演算結果を 4 倍にします。
595     TEVSCALE_4,
596 
597     //! 列挙子の総数です。
598     TEVSCALE_MAX
599 };
600 
601 //---------------------------------------------------------------------------
602 //! @brief Tevの定数カラーレジスタにロードするカラーを指定する列挙子です。
603 //!
604 //! @since 2009/09/18 初版。
605 //---------------------------------------------------------------------------
606 enum TevKonstSel
607 {
608     //! コンバイナバッファ用カラーをロードします。
609     TEVKONSTSEL_BUFFER,
610     //! コンスタントレジスタ 0 をロードします。
611     TEVKONSTSEL_K0,
612     //! コンスタントレジスタ 1 をロードします。
613     TEVKONSTSEL_K1,
614     //! コンスタントレジスタ 2 をロードします。
615     TEVKONSTSEL_K2,
616     //! コンスタントレジスタ 3 をロードします。
617     TEVKONSTSEL_K3,
618     //! コンスタントレジスタ 4 をロードします。
619     TEVKONSTSEL_K4,
620     //! コンスタントレジスタ 5 をロードします。
621     TEVKONSTSEL_K5,
622 
623     //! 列挙子の総数です。
624     TEVKONSTSEL_MAX
625 };
626 
627 //---------------------------------------------------------------------------
628 //! @brief アルファテストのモードを指定する列挙子です。
629 //!
630 //! @since 2009/09/18 初版。
631 //---------------------------------------------------------------------------
632 enum AlphaTest
633 {
634     //! フラグメントは常に受け入れません。
635     ALPHATEST_NEVER,
636     //! フラグメント・アルファ<参照アルファのとき受け入れます。
637     ALPHATEST_LESS,
638     //! フラグメント・アルファ≦参照アルファのとき受け入れます。
639     ALPHATEST_LEQUAL,
640     //! フラグメント・アルファ=参照アルファのとき受け入れます。
641     ALPHATEST_EQUAL,
642     //! フラグメント・アルファ≠参照アルファのとき受け入れます。
643     ALPHATEST_NEQUAL,
644     //! フラグメント・アルファ≧参照アルファのとき受け入れます。
645     ALPHATEST_GEQUAL,
646     //! フラグメント・アルファ>参照アルファのとき受け入れます。
647     ALPHATEST_GREATER,
648     //! フラグメントは無条件に受け入れます。
649     ALPHATEST_ALWAYS,
650 
651     //! 列挙子の総数です。
652     ALPHATEST_MAX
653 };
654 
655 //---------------------------------------------------------------------------
656 //! @brief ブレンド処理のソースへの係数です。
657 //!
658 //! @since 2009/09/18 初版。
659 //---------------------------------------------------------------------------
660 enum BlendFactorSrc
661 {
662     //! (0.0) です。
663     BLENDFACTORSRC_0,
664     //! (1.0) です。
665     BLENDFACTORSRC_1,
666     //! (ターゲット・カラー) です。
667     BLENDFACTORSRC_DST_COLOR,
668     //! (1.0 - ターゲット・カラー) です。
669     BLENDFACTORSRC_INV_DST_COLOR,
670     //! (ソース・アルファ) です。
671     BLENDFACTORSRC_SRC_ALPHA,
672     //! (1.0 - ソース・アルファ) です。
673     BLENDFACTORSRC_INV_SRC_ALPHA,
674     //! (ターゲット・アルファ) です。
675     BLENDFACTORSRC_DST_ALPHA,
676     //! (1.0 - ターゲットアルファ) です。
677     BLENDFACTORSRC_INV_DST_ALPHA,
678 
679     //! 列挙子の総数です。
680     BLENDFACTORSRC_MAX
681 };
682 
683 //---------------------------------------------------------------------------
684 //! @brief ブレンド処理のターゲットへの係数です。
685 //!
686 //! @since 2009/09/18 初版。
687 //---------------------------------------------------------------------------
688 enum BlendFactorDst
689 {
690     //! (0.0) です。
691     BLENDFACTORDST_0,
692     //! (1.0) です。
693     BLENDFACTORDST_1,
694     //! (ソース・カラー) です。
695     BLENDFACTORDST_SRC_COLOR,
696     //! (1.0 - ソース・カラー) です。
697     BLENDFACTORDST_INV_SRC_COLOR,
698     //! (ソース・アルファ) です。
699     BLENDFACTORDST_SRC_ALPHA,
700     //! (1.0 - ソース・アルファ) です。
701     BLENDFACTORDST_INV_SRC_ALPHA,
702     //! (ターゲット・アルファ) です。
703     BLENDFACTORDST_DST_ALPHA,
704     //! (1.0 - ターゲット・アルファ) です。
705     BLENDFACTORDST_INV_DST_ALPHA,
706 
707     //! 列挙子の総数です。
708     BLENDFACTORDST_MAX
709 };
710 
711 //---------------------------------------------------------------------------
712 //! @brief ブレンドの演算方法を指定します。
713 //!
714 //! @since 2009/09/18 初版。
715 //---------------------------------------------------------------------------
716 enum BlendOp
717 {
718     //! ブレンド処理は行いません。
719     BLENDOP_DISABLE,
720     //! 加算します。
721     BLENDOP_ADD,
722     //! 減算します。
723     BLENDOP_SUBTRACT,
724     //! 逆方向に減算します。
725     BLENDOP_REVERSE_SUBTRACT,
726 
727     //! 列挙子の総数です。
728     BLENDOP_MAX
729 };
730 
731 //---------------------------------------------------------------------------
732 //! @brief 論理演算の演算方法を指定します。
733 //!
734 //! @since 2009/09/18 初版。
735 //---------------------------------------------------------------------------
736 enum LogicOp
737 {
738     //! 論理演算は行いません。
739     LOGICOP_DISABLE,
740     //! 何もしません。
741     LOGICOP_NOOP,
742     //! 0x00 です。
743     LOGICOP_CLEAR,
744     //! 0xff です。
745     LOGICOP_SET,
746     //! (ソース) です。
747     LOGICOP_COPY,
748     //! (~ソース) です。
749     LOGICOP_INV_COPY,
750     //! (~ターゲット) です。
751     LOGICOP_INV,
752     //! (ソース & ターゲット) です。
753     LOGICOP_AND,
754     //! ~(ソース & ターゲット) です。
755     LOGICOP_NAND,
756     //! (ソース | ターゲット です。
757     LOGICOP_OR,
758     //! ~(ソース | ターゲット) です。
759     LOGICOP_NOR,
760     //! (ソース ^ ターゲット です。
761     LOGICOP_XOR,
762     //! ~(ソース ^ ターゲット) です。
763     LOGICOP_EQUIV,
764     //! (ソース & ~ターゲット) です。
765     LOGICOP_REV_AND,
766     //! (~ソース & ターゲット) です。
767     LOGICOP_INV_AND,
768     //! (ソース | ~ターゲット) です。
769     LOGICOP_REV_OR,
770     //! (~ソース | ターゲット) です。
771     LOGICOP_INV_OR,
772 
773     //! 列挙子の総数です。
774     LOGICOP_MAX
775 };
776 
777 //---------------------------------------------------------------------------
778 //! @brief テクスチャ座標の生成方法を指定します。
779 //!
780 //! @since 2009/09/18 初版。
781 //---------------------------------------------------------------------------
782 enum TexGenType
783 {
784     //! 入力属性に関して 2X4 行列の乗算を行い、S, T テクスチャ座標を生成します。
785     TEXGENTYPE_MTX2x4,
786 
787     //! 列挙子の総数です。
788     TEXGENTYPE_MAX
789 };
790 
791 //---------------------------------------------------------------------------
792 //! @brief テクスチャ座標のソースを指定します。
793 //!
794 //! @since 2009/09/18 初版。
795 //---------------------------------------------------------------------------
796 enum TexGenSrc
797 {
798     //! テクスチャ座標 0 を使います。
799     TEXGENSRC_TEX0,
800     //! テクスチャ座標 1 を使います。
801     TEXGENSRC_TEX1,
802     //! テクスチャ座標 2 を使います。
803     TEXGENSRC_TEX2,
804 
805     //! 列挙子の総数です。
806     TEXGENSRC_MAX
807 };
808 
809 //---------------------------------------------------------------------------
810 //! @brief テクスチャの反転表示に関する列挙子です。
811 //!
812 //! @since 2009/09/18 初版。
813 //---------------------------------------------------------------------------
814 enum TextureFlip
815 {
816     //! そのまま表示します。
817     TEXTUREFLIP_NONE,
818     //! 左右(水平方向)に反転して表示します。
819     TEXTUREFLIP_FLIPH,
820     //! 上下(垂直方向)に反転して表示します。
821     TEXTUREFLIP_FLIPV,
822     //! 90度回転して表示します。
823     TEXTUREFLIP_ROTATE90,
824     //! 180度回転して表示します。
825     TEXTUREFLIP_ROTATE180,
826     //! 270度回転して表示します。
827     TEXTUREFLIP_ROTATE270,
828 
829     //! 列挙子の総数です。
830     TEXTUREFLIP_MAX
831 };
832 
833 //---------------------------------------------------------------------------
834 //! @brief 原点位置を指定します。
835 //!
836 //! @since 2009/09/18 初版。
837 //---------------------------------------------------------------------------
838 enum ScreenOriginType
839 {
840     //! レイアウトの左上隅を原点とします。
841     SCREENORIGINTYPE_CLASSIC,
842     //! レイアウトの中心を原点とします。
843     SCREENORIGINTYPE_NORMAL,
844 
845     //! 列挙子の総数です。
846     SCREENORIGINTYPE_MAX
847 };
848 
849 //---------------------------------------------------------------------------
850 //! @brief TextBox の行そろえ指定です。
851 //!
852 //! @since 2009/09/18 初版。
853 //---------------------------------------------------------------------------
854 enum TextAlignment
855 {
856     //! 水平方向の位置にあわせます。
857     TEXTALIGNMENT_SYNCHRONOUS,
858     //! 左にそろえます。
859     TEXTALIGNMENT_LEFT,
860     //! 中央にそろえます。
861     TEXTALIGNMENT_CENTER,
862     //! 右にそろえます。
863     TEXTALIGNMENT_RIGHT,
864 
865     //! 列挙子の総数です。
866     TEXTALIGNMENT_MAX
867 };
868 
869 //---------------------------------------------------------------------------
870 //! @brief 頂点属性番号です。
871 //!
872 //! @since 2009/09/18 初版。
873 //---------------------------------------------------------------------------
874 enum VertexAttr
875 {
876     //! 頂点座標です。
877     VERTEXATTR_POS,
878     //! 頂点カラーです。
879     VERTEXATTR_COLOR,
880     //! テクスチャ座標 0 です。
881     VERTEXATTR_TEXCOORD0,
882     //! テクスチャ座標 1 です。
883     VERTEXATTR_TEXCOORD1,
884     //! テクスチャ座標 2 です。
885     VERTEXATTR_TEXCOORD2,
886 
887     //! 頂点インデックスです。
888     VERTEXATTR_VERTEX_INDEX = 0,
889 
890     //! 列挙子の総数です。
891     VERTEXATTR_MAX
892 };
893 
894 //---------------------------------------------------------------------------
895 //! @brief 頂点属性に要求されるサイズです。
896 //!
897 //! @since 2009/09/18 初版。
898 //---------------------------------------------------------------------------
899 enum VertexAttrSize
900 {
901     //! 頂点座標に要求されるサイズです。
902     VERTEXATTRSIZE_POS = 4,
903     //! 頂点カラーに要求されるサイズです。
904     VERTEXATTRSIZE_COLOR = 4,
905     //! テクスチャ座標に要求されるサイズです。
906     VERTEXATTRSIZE_TEXCOORD = 2,
907     //! 頂点インデックスに要求されるサイズです。
908     VERTEXATTRSIZE_INDEX = 2
909 };
910 
911 using nw::font::Vertex;
912 using nw::font::VERTEX_LT;
913 using nw::font::VERTEX_RT;
914 using nw::font::VERTEX_LB;
915 using nw::font::VERTEX_RB;
916 using nw::font::VERTEX_MAX;
917 
918 //---------------------------------------------------------------------------
919 //! @brief ペインの四隅に設定された頂点カラーにアクセスするときに使用します。
920 //!
921 //! @since 2009/09/18 初版。
922 //---------------------------------------------------------------------------
923 enum VertexColor
924 {
925     //! 左上隅の頂点カラーです。
926     VERTEXCOLOR_LT,
927     //! 右上隅の頂点カラーです。
928     VERTEXCOLOR_RT,
929     //! 左下隅の頂点カラーです。
930     VERTEXCOLOR_LB,
931     //! 右下隅の頂点カラーです。
932     VERTEXCOLOR_RB,
933 
934     //! 列挙子の総数です。
935     VERTEXCOLOR_MAX
936 };
937 
938 //---------------------------------------------------------------------------
939 //! @brief ウィンドウフレームを指定するときに使用します。
940 //!
941 //! @since 2009/09/18 初版。
942 //---------------------------------------------------------------------------
943 enum WindowFrame
944 {
945     //! 左上フレームです。
946     WINDOWFRAME_LT,
947     //! 右上フレームです。
948     WINDOWFRAME_RT,
949     //! 左下フレームです。
950     WINDOWFRAME_LB,
951     //! 右下フレームです。
952     WINDOWFRAME_RB,
953     //! 左フレームです。
954     WINDOWFRAME_L,
955     //! 右フレームです。
956     WINDOWFRAME_R,
957     //! 上フレームです。
958     WINDOWFRAME_T,
959     //! 下フレームです。
960     WINDOWFRAME_B,
961 
962     //! 列挙子の総数です。
963     WINDOWFRAME_MAX
964 };
965 
966 //---------------------------------------------------------------------------
967 //! @brief 文字色の設定にアクセスするときに使用します。
968 //!
969 //! @since 2009/09/18 初版。
970 //---------------------------------------------------------------------------
971 enum TextColor
972 {
973     //! 上端の文字色です。
974     TEXTCOLOR_TOP,
975     //! 下端の文字色です。
976     TEXTCOLOR_BOTTOM,
977 
978     //! 列挙子の総数です。
979     TEXTCOLOR_MAX
980 };
981 
982 //---------------------------------------------------------------------------
983 //! @brief 文字色の設定にアクセスするときに使用します。
984 //!
985 //! @since 2009/09/18 初版。
986 //---------------------------------------------------------------------------
987 enum InterpolateColor
988 {
989     //! 黒カラー補間色です。
990     INTERPOLATECOLOR_BLACK = 0,
991     //! 白カラー補間色です。
992     INTERPOLATECOLOR_WHITE = 1,
993 
994     //! 列挙子の総数です。
995     INTERPOLATECOLOR_MAX
996 };
997 
998 //@}
999 
1000 //! @name リソースアクセサ
1001 //@{
1002 
1003 //---------------------------------------------------------------------------
1004 //! @brief 拡張ユーザデータのデータ種別です。
1005 //!
1006 //! @since 2009/09/18 初版。
1007 //---------------------------------------------------------------------------
1008 enum ExtUserDataType
1009 {
1010     //! 文字列です。
1011     EXTUSERDATATYPE_STRING,
1012     //! 整数配列です。
1013     EXTUSERDATATYPE_INT,
1014     //! 浮動小数点数配列です。
1015     EXTUSERDATATYPE_FLOAT,
1016 
1017     //! 列挙子の総数です。
1018     EXTUSERDATATYPE_MAX
1019 };
1020 
1021 //@}
1022 
1023 //! @name アニメーション
1024 //@{
1025 
1026 //---------------------------------------------------------------------------
1027 //! @brief アニメーションの対象を表します。
1028 //!
1029 //! @sa res::AnimationContent
1030 //!
1031 //! @since 2009/09/18 初版。
1032 //---------------------------------------------------------------------------
1033 enum AnimContentType
1034 {
1035     //! ペインを対象としたアニメーションです。
1036     ANIMCONTENTTYPE_PANE,
1037     //! マテリアルを対象としたアニメーションです。
1038     ANIMCONTENTTYPE_MATERIAL,
1039 
1040     //! 列挙子の総数です。
1041     ANIMCONTENTTYPE_MAX
1042 };
1043 
1044 //---------------------------------------------------------------------------
1045 //! @brief アニメーションタグのフラグです。
1046 //!
1047 //! @since 2009/09/18 初版。
1048 //---------------------------------------------------------------------------
1049 enum AnimTagFlag
1050 {
1051     //! ペインの子孫ペインもバインドの対象にします。
1052     ANIMTAGFLAG_DESCENDINGBIND,
1053 
1054     //! 列挙子の総数です。
1055     ANIMTAGFLAG_MAX
1056 };
1057 
1058 //---------------------------------------------------------------------------
1059 //! @brief ペインアニメーションの対象を指定します。
1060 //!
1061 //! @since 2009/09/18 初版。
1062 //---------------------------------------------------------------------------
1063 enum AnimTargetPane
1064 {
1065     //! 表示位置の X 座標です。
1066     ANIMTARGET_PANE_TRANSLATEX = 0,
1067     //! 表示位置の Y 座標です。
1068     ANIMTARGET_PANE_TRANSLATEY,
1069     //! 表示位置の Z 座標です。
1070     ANIMTARGET_PANE_TRANSLATEZ,
1071     //! X 軸の回転量です。
1072     ANIMTARGET_PANE_ROTATEX,
1073     //! Y 軸の回転量です。
1074     ANIMTARGET_PANE_ROTATEY,
1075     //! Z 軸の回転量です。
1076     ANIMTARGET_PANE_ROTATEZ,
1077     //! X 座標方向の拡大率です。
1078     ANIMTARGET_PANE_SCALEX,
1079     //! Y 座標方向の拡大率です。
1080     ANIMTARGET_PANE_SCALEY,
1081     //! 幅です。
1082     ANIMTARGET_PANE_SIZEW,
1083     //! 高さです。
1084     ANIMTARGET_PANE_SIZEH,
1085 
1086     //! 列挙子の総数です。
1087     ANIMTARGET_PANE_MAX
1088 };
1089 
1090 //---------------------------------------------------------------------------
1091 //! @brief ビジビリティアニメーションの対象を指定します。
1092 //!
1093 //! @since 2009/09/18 初版。
1094 //---------------------------------------------------------------------------
1095 enum AnimTargetVisibility
1096 {
1097     //! ビジビリティです。
1098     ANIMTARGET_VISIBILITY_VISIBILITY = 0,
1099 
1100     //! 列挙子の総数です。
1101     ANIMTARGET_VISIBILITY_MAX
1102 };
1103 
1104 //---------------------------------------------------------------------------
1105 //! @brief ペインカラーアニメーションの対象を指定します。
1106 //!
1107 //! @since 2009/09/18 初版。
1108 //---------------------------------------------------------------------------
1109 enum AnimTargetPaneColor
1110 {
1111     //! 左上隅の頂点カラーの R 成分値です。
1112     ANIMTARGET_VERTEXCOLOR_LT_R = 0,
1113     //! 左上隅の頂点カラーの G 成分値です。
1114     ANIMTARGET_VERTEXCOLOR_LT_G,
1115     //! 左上隅の頂点カラーの B 成分値です。
1116     ANIMTARGET_VERTEXCOLOR_LT_B,
1117     //! 左上隅の頂点カラーの A 成分値です。
1118     ANIMTARGET_VERTEXCOLOR_LT_A,
1119     //! 右上隅の頂点カラーの R 成分値です。
1120     ANIMTARGET_VERTEXCOLOR_RT_R,
1121     //! 右上隅の頂点カラーの G 成分値です。
1122     ANIMTARGET_VERTEXCOLOR_RT_G,
1123     //! 右上隅の頂点カラーの B 成分値です。
1124     ANIMTARGET_VERTEXCOLOR_RT_B,
1125     //! 右上隅の頂点カラーの A 成分値です。
1126     ANIMTARGET_VERTEXCOLOR_RT_A,
1127     //! 左下隅の頂点カラーの R 成分値です。
1128     ANIMTARGET_VERTEXCOLOR_LB_R,
1129     //! 左下隅の頂点カラーの G 成分値です。
1130     ANIMTARGET_VERTEXCOLOR_LB_G,
1131     //! 左下隅の頂点カラーの B 成分値です。
1132     ANIMTARGET_VERTEXCOLOR_LB_B,
1133     //! 左下隅の頂点カラーの A 成分値です。
1134     ANIMTARGET_VERTEXCOLOR_LB_A,
1135     //! 右下隅の頂点カラーの R 成分値です。
1136     ANIMTARGET_VERTEXCOLOR_RB_R,
1137     //! 右下隅の頂点カラーの G 成分値です。
1138     ANIMTARGET_VERTEXCOLOR_RB_G,
1139     //! 右下隅の頂点カラーの B 成分値です。
1140     ANIMTARGET_VERTEXCOLOR_RB_B,
1141     //! 右下隅の頂点カラーの A 成分値です。
1142     ANIMTARGET_VERTEXCOLOR_RB_A,
1143 
1144     //! 列挙子の総数です。
1145     ANIMTARGET_VERTEXCOLOR_MAX,
1146 
1147     //! ペインのアルファ値です。
1148     ANIMTARGET_PANE_ALPHA = ANIMTARGET_VERTEXCOLOR_MAX,
1149 
1150     //! 列挙子の総数です。
1151     ANIMTARGET_PANE_COLOR_MAX
1152 };
1153 
1154 //---------------------------------------------------------------------------
1155 //! @brief マテリアルカラーアニメーションの対象を指定します。
1156 //!
1157 //! @since 2009/09/18 初版。
1158 //---------------------------------------------------------------------------
1159 enum AnimTargetMatColor
1160 {
1161     //! コンバイナバッファの R 成分です。
1162     ANIMTARGET_MATCOLOR_BUFFER_R = 0,
1163     //! コンバイナバッファの R 成分です。
1164     ANIMTARGET_MATCOLOR_BUFFER_G,
1165     //! コンバイナバッファの R 成分です。
1166     ANIMTARGET_MATCOLOR_BUFFER_B,
1167     //! コンバイナバッファの R 成分です。
1168     ANIMTARGET_MATCOLOR_BUFFER_A,
1169     //! コンスタントレジスタ 0 の R 成分です。
1170     ANIMTARGET_MATCOLOR_KONST0_R,
1171     //! コンスタントレジスタ 0 の G 成分です。
1172     ANIMTARGET_MATCOLOR_KONST0_G,
1173     //! コンスタントレジスタ 0 の B 成分です。
1174     ANIMTARGET_MATCOLOR_KONST0_B,
1175     //! コンスタントレジスタ 0 の A 成分です。
1176     ANIMTARGET_MATCOLOR_KONST0_A,
1177     //! コンスタントレジスタ 1 の R 成分です。
1178     ANIMTARGET_MATCOLOR_KONST1_R,
1179     //! コンスタントレジスタ 1 の G 成分です。
1180     ANIMTARGET_MATCOLOR_KONST1_G,
1181     //! コンスタントレジスタ 1 の B 成分です。
1182     ANIMTARGET_MATCOLOR_KONST1_B,
1183     //! コンスタントレジスタ 1 の A 成分です。
1184     ANIMTARGET_MATCOLOR_KONST1_A,
1185     //! コンスタントレジスタ 2 の R 成分です。
1186     ANIMTARGET_MATCOLOR_KONST2_R,
1187     //! コンスタントレジスタ 2 の G 成分です。
1188     ANIMTARGET_MATCOLOR_KONST2_G,
1189     //! コンスタントレジスタ 2 の B 成分です。
1190     ANIMTARGET_MATCOLOR_KONST2_B,
1191     //! コンスタントレジスタ 2 の A 成分です。
1192     ANIMTARGET_MATCOLOR_KONST2_A,
1193     //! コンスタントレジスタ 3 の R 成分です。
1194     ANIMTARGET_MATCOLOR_KONST3_R,
1195     //! コンスタントレジスタ 3 の G 成分です。
1196     ANIMTARGET_MATCOLOR_KONST3_G,
1197     //! コンスタントレジスタ 3 の B 成分です。
1198     ANIMTARGET_MATCOLOR_KONST3_B,
1199     //! コンスタントレジスタ 3 の A 成分です。
1200     ANIMTARGET_MATCOLOR_KONST3_A,
1201     //! コンスタントレジスタ 4 の R 成分です。
1202     ANIMTARGET_MATCOLOR_KONST4_R,
1203     //! コンスタントレジスタ 4 の G 成分です。
1204     ANIMTARGET_MATCOLOR_KONST4_G,
1205     //! コンスタントレジスタ 4 の B 成分です。
1206     ANIMTARGET_MATCOLOR_KONST4_B,
1207     //! コンスタントレジスタ 4 の A 成分です。
1208     ANIMTARGET_MATCOLOR_KONST4_A,
1209     //! コンスタントレジスタ 5 の R 成分です。
1210     ANIMTARGET_MATCOLOR_KONST5_R,
1211     //! コンスタントレジスタ 5 の G 成分です。
1212     ANIMTARGET_MATCOLOR_KONST5_G,
1213     //! コンスタントレジスタ 5 の B 成分です。
1214     ANIMTARGET_MATCOLOR_KONST5_B,
1215     //! コンスタントレジスタ 5 の A 成分です。
1216     ANIMTARGET_MATCOLOR_KONST5_A,
1217 
1218     //! 列挙子の総数です。
1219     ANIMTARGET_MATCOLOR_MAX
1220 };
1221 
1222 //---------------------------------------------------------------------------
1223 //! @brief テクスチャ SRT アニメーションの対象を指定します。
1224 //!
1225 //! @since 2009/09/18 初版。
1226 //---------------------------------------------------------------------------
1227 enum AnimTargetTexSRT
1228 {
1229     //! S 座標の移動量です。
1230     ANIMTARGET_TEXSRT_TRANSLATES = 0,
1231     //! T 座標の移動量です。
1232     ANIMTARGET_TEXSRT_TRANSLATET,
1233     //! 回転量です。
1234     ANIMTARGET_TEXSRT_ROTATE,
1235     //! S 座標方向の拡大率です。
1236     ANIMTARGET_TEXSRT_SCALES,
1237     //! T 座標方向の拡大率です。
1238     ANIMTARGET_TEXSRT_SCALET,
1239 
1240     //! 列挙子の総数です。
1241     ANIMTARGET_TEXSRT_MAX
1242 };
1243 
1244 //---------------------------------------------------------------------------
1245 //! @brief テクスチャパターンアニメーションの対象を指定します。
1246 //!
1247 //! @since 2009/09/18 初版。
1248 //---------------------------------------------------------------------------
1249 enum AnimTargetTexPattern
1250 {
1251     //! イメージによるアニメーションです。
1252     ANIMTARGET_TEXPATTURN_IMAGE = 0,
1253 
1254     //! 列挙子の総数です。
1255     ANIMTARGET_TEXPATTURN_MAX
1256 };
1257 
1258 //---------------------------------------------------------------------------
1259 //! @brief アニメーションの計算形式です。
1260 //!
1261 //! @since 2009/09/18 初版。
1262 //---------------------------------------------------------------------------
1263 enum AnimCurve
1264 {
1265     //! コンスタント形式です。
1266     ANIMCURVE_CONSTANT,
1267     //! ステップ形式です。
1268     ANIMCURVE_STEP,
1269     //! エルミート補間形式です。
1270     ANIMCURVE_HERMITE,
1271 
1272     //! 列挙子の総数です。
1273     ANIMCURVE_MAX
1274 };
1275 
1276 //---------------------------------------------------------------------------
1277 //! @brief アニメーションの計算を制御するオプションです。
1278 //!
1279 //! @sa Layout::Animate
1280 //! @sa Pane::Animate
1281 //!
1282 //! @since 2009/09/18 初版。
1283 //---------------------------------------------------------------------------
1284 enum AnimateOpt
1285 {
1286     ANIMATEOPT_NOANIMATEINVISIBLE   = 0x0001 //!< 非表示のペインの計算を省略します。
1287 };
1288 
1289 //@}
1290 
1291 namespace res
1292 {
1293 
1294 //---------------------------------------------------------------------------
1295 //! @brief リソース内で2次元ベクトルを保持します。
1296 //!
1297 //! @since 2009/09/18 初版。
1298 //---------------------------------------------------------------------------
1299 struct Vec2
1300 {
1301     //----------------------------------------
1302     //! @name コンストラクタ/デストラクタ
1303     //@{
1304 
1305     //! @brief コンストラクタです。
1306     //!
1307     //! @since 2009/09/18 初版。
1308     //!
Vec2Vec21309     Vec2()
1310     {
1311     }
1312 
1313     //! @brief コンストラクタです。
1314     //!
1315     //! @param x X座標の値です。
1316     //! @param y Y座標の値です。
1317     //!
1318     //! @since 2009/09/18 初版。
1319     //!
Vec2Vec21320     Vec2(f32 x, f32 y)
1321     {
1322         this->x = x;
1323         this->y = y;
1324     }
1325 
1326     //@}
1327 
1328     //! @brief 変換オペレータです。
1329     //!
1330     //! @since 2009/09/18 初版。
1331     //!
VEC2Vec21332     operator const math::VEC2() const
1333     {
1334         return math::VEC2(x, y);
1335     }
1336 
1337     //! X座標の値です。
1338     ut::ResF32 x;
1339     //! Y座標の値です。
1340     ut::ResF32 y;
1341 };
1342 
1343 //---------------------------------------------------------------------------
1344 //! @brief リソース内で3次元ベクトルを保持します。
1345 //!
1346 //! @since 2009/09/18 初版。
1347 //---------------------------------------------------------------------------
1348 struct Vec3
1349 {
1350     //----------------------------------------
1351     //! @name コンストラクタ/デストラクタ
1352     //@{
1353 
1354     //! @brief コンストラクタです。
1355     //!
1356     //! @since 2009/09/18 初版。
1357     //!
Vec3Vec31358     Vec3()
1359     {
1360     }
1361 
1362     //! @brief コンストラクタです。
1363     //!
1364     //! @param x X座標の値です。
1365     //! @param y Y座標の値です。
1366     //! @param z Z座標の値です。
1367     //!
1368     //! @since 2009/09/18 初版。
1369     //!
Vec3Vec31370     Vec3(f32 x, f32 y, f32 z)
1371     {
1372         this->x = x;
1373         this->y = y;
1374         this->z = z;
1375     }
1376 
1377     //@}
1378 
1379     //! @brief 変換オペレータです。
1380     //!
1381     //! @since 2009/09/18 初版。
1382     //!
VEC3Vec31383     operator const math::VEC3() const
1384     {
1385         return math::VEC3(x, y, z);
1386     }
1387 
1388     //! X座標の値です。
1389     ut::ResF32 x;
1390 
1391     //! Y座標の値です。
1392     ut::ResF32 y;
1393 
1394     //! Z座標の値です。
1395     ut::ResF32 z;
1396 };
1397 
1398 } // namespace nw::lyt::res
1399 
1400 //---------------------------------------------------------------------------
1401 //! :category 描画
1402 //!
1403 //! @brief 幅と高さを持つ構造体です。
1404 //!
1405 //! @since 2009/09/18 初版。
1406 //---------------------------------------------------------------------------
1407 struct Size
1408 {
1409     //----------------------------------------
1410     //! @name コンストラクタ/デストラクタ
1411     //@{
1412 
1413     //! @brief コンストラクタです。
1414     //!
1415     //! @details
1416     //! 幅と高さを 0 に初期化します。
1417     //!
1418     //! @since 2009/09/18 初版。
1419     //!
SizeSize1420     Size()
1421         : width(0), height(0)
1422     {}
1423 
1424     //! @brief コンストラクタです。
1425     //!
1426     //! @details
1427     //! 指定の幅と高さで初期化します。
1428     //!
1429     //! @param aWidth 幅です。
1430     //! @param aHeight 高さです。
1431     //!
1432     //! @since 2009/09/18 初版。
1433     //!
SizeSize1434     Size(f32 aWidth, f32 aHeight)
1435         : width(aWidth), height(aHeight)
1436     {}
1437 
1438     //! @brief コンストラクタです。
1439     //!
1440     //! @details
1441     //! 設定をコピーします。
1442     //!
1443     //! @param other コピー元です。
1444     //!
1445     //! @since 2009/09/18 初版。
1446     //!
SizeSize1447     Size(const Size& other)
1448         : width(other.width), height(other.height)
1449     {}
1450 
1451     //@}
1452 
1453     //! 幅です。
1454     ut::ResF32 width;
1455 
1456     //! 高さです。
1457     ut::ResF32 height;
1458 };
1459 
1460 //---------------------------------------------------------------------------
1461 //! @brief 二つの Size が等しいかどうかを判定します。
1462 //!
1463 //! @param a 比較する Size 構造体のリファレンスです。
1464 //! @param b 比較する Size 構造体のリファレンスです。
1465 //!
1466 //! @return
1467 //! 幅と高さが等しければ true を、等しくなければ false を返します。
1468 //!
1469 //! @since 2009/09/18 初版。
1470 //---------------------------------------------------------------------------
1471 inline bool
1472 operator == (const Size& a, const Size& b)
1473 {
1474     return a.width == b.width && a.height == b.height;
1475 }
1476 
1477 //---------------------------------------------------------------------------
1478 //! :category 描画
1479 //!
1480 //! @brief テクスチャの幅と高さを持つ構造体です。
1481 //!
1482 //! @since 2009/09/18 初版。
1483 //---------------------------------------------------------------------------
1484 struct TexSize
1485 {
1486     //----------------------------------------
1487     //! @name コンストラクタ/デストラクタ
1488     //@{
1489 
1490     //! @brief コンストラクタです。
1491     //!
1492     //! @details
1493     //! 幅と高さを 0 で初期化します。
1494     //!
1495     //! @since 2009/09/18 初版。
1496     //!
TexSizeTexSize1497     TexSize()
1498         : width(0), height(0)
1499     {}
1500 
1501     //! @brief コンストラクタです。
1502     //!
1503     //! @details
1504     //! 指定の幅と高さで初期化します。
1505     //!
1506     //! @param aWidth 幅です。
1507     //! @param aHeight 高さです。
1508     //!
1509     //! @since 2009/09/18 初版。
1510     //!
TexSizeTexSize1511     TexSize(u16 aWidth, u16 aHeight)
1512         : width(aWidth), height(aHeight)
1513     {}
1514 
1515     //! @brief コピーコンストラクタです。
1516     //!
1517     //! @param other コピー元です。
1518     //!
1519     //! @since 2009/09/18 初版。
1520     //!
TexSizeTexSize1521     TexSize(const TexSize& other)
1522         : width(other.width), height(other.height)
1523     {}
1524 
1525     //! @brief Size への変換演算子です。
1526     //!
1527     //! @return Size を返します。
1528     //!
1529     //! @since 2010/02/26 初版。
1530     //!
SizeTexSize1531     operator const Size() const
1532     {
1533         return Size(this->width, this->height);
1534     }
1535 
1536     //@}
1537 
1538     //! 幅です。
1539     u16 width;
1540 
1541     //! 高さです。
1542     u16 height;
1543 };
1544 
1545 //---------------------------------------------------------------------------
1546 //! :category 描画
1547 //!
1548 //! @brief テクスチャ SRT 変換行列の構造体です。
1549 //!
1550 //! @since 2009/09/18 初版。
1551 //---------------------------------------------------------------------------
1552 struct TexSRT
1553 {
1554     //! 平行移動です。
1555     res::Vec2 translate;
1556     //! 回転です。
1557     ut::ResF32 rotate;
1558     //! 拡大率です。
1559     res::Vec2 scale;
1560 };
1561 
1562 //---------------------------------------------------------------------------
1563 //! :category 描画
1564 //!
1565 //! @brief テクスチャ座標生成に設定する値を持つ構造体です。
1566 //!
1567 //! @since 2009/09/18 初版。
1568 //---------------------------------------------------------------------------
1569 struct TexCoordGen
1570 {
1571     //----------------------------------------
1572     //! @name コンストラクタ/デストラクタ
1573     //@{
1574 
1575     //! @brief コンストラクタです。
1576     //!
1577     //! @since 2009/09/18 初版。
1578     //!
TexCoordGenTexCoordGen1579     TexCoordGen()
1580     {
1581         Set(TEXGENTYPE_MTX2x4, TEXGENSRC_TEX0);
1582     }
1583 
1584     //! @brief コンストラクタです。
1585     //!
1586     //! @param aTexGenType テクスチャ座標の生成方法です。
1587     //! @param aTexGenSrc テクスチャ座標のソースです。
1588     //!
1589     //! @since 2009/09/18 初版。
1590     //!
TexCoordGenTexCoordGen1591     TexCoordGen(
1592         TexGenType      aTexGenType,
1593         TexGenSrc       aTexGenSrc
1594     )
1595     {
1596         Set(aTexGenType, aTexGenSrc);
1597     }
1598 
1599     //@}
1600 
1601     //----------------------------------------
1602     //! @name 取得/設定
1603     //@{
1604 
1605     //! @brief テクスチャ座標生成の設定を変更します。
1606     //!
1607     //! @param aTexGenType テクスチャ座標の生成方法です。
1608     //! @param aTexGenSrc テクスチャ座標のソースです。
1609     //!
1610     //! @since 2009/09/18 初版。
1611     //!
SetTexCoordGen1612     void Set(
1613         TexGenType    aTexGenType,
1614         TexGenSrc     aTexGenSrc
1615                         )
1616     {
1617         texGenType = aTexGenType;
1618         texGenSrc = aTexGenSrc;
1619     }
1620 
1621     //! @brief テクスチャ座標の生成方法を取得します。
1622     //!
1623     //! @return テクスチャ座標の生成方法を返します。
1624     //!
1625     //! @since 2009/09/18 初版。
1626     //!
GetTexGenTypeTexCoordGen1627     TexGenType GetTexGenType() const
1628     {
1629         return TexGenType(texGenType);
1630     }
1631 
1632     //! @brief テクスチャ座標のソースを取得します。
1633     //!
1634     //! @return テクスチャ座標のソースを返します。
1635     //!
1636     //! @since 2009/09/18 初版。
1637     //!
GetTexGenSrcTexCoordGen1638     TexGenSrc GetTexGenSrc() const
1639     {
1640         return TexGenSrc(texGenSrc);
1641     }
1642 
1643     //@}
1644 
1645 private:
1646     //! テクスチャ座標生成のタイプです。
1647     ut::ResU8           texGenType;
1648     //! テクスチャ座標生成に使用するソースです。
1649     ut::ResU8           texGenSrc;
1650     //! (未使用)
1651     ut::ResU8           reserve[2];
1652 };
1653 
1654 //---------------------------------------------------------------------------
1655 //! :category 描画
1656 //!
1657 //! @brief TEV ステージの設定を持つ構造体です。
1658 //!
1659 //! @since 2009/09/18 初版。
1660 //---------------------------------------------------------------------------
1661 struct TevStage
1662 {
1663     //----------------------------------------
1664     //! @name コンストラクタ/デストラクタ
1665     //@{
1666 
1667     //! @brief コンストラクタです。
1668     //!
1669     //! @since 2009/09/18 初版。
1670     //!
TevStageTevStage1671     TevStage()
1672     {
1673         Set(
1674             TEVMODE_REPLACE,
1675             TEVMODE_REPLACE,
1676             TEVSRC_PRIMARY,
1677             TEVSRC_PRIMARY,
1678             TEVSRC_PRIMARY,
1679             TEVSRC_PRIMARY,
1680             TEVSRC_PRIMARY,
1681             TEVSRC_PRIMARY,
1682             TEVOPRGB_RGB,
1683             TEVOPRGB_RGB,
1684             TEVOPRGB_RGB,
1685             TEVOPALP_ALPHA,
1686             TEVOPALP_ALPHA,
1687             TEVOPALP_ALPHA,
1688             TEVSCALE_1,
1689             TEVSCALE_1,
1690             TEVKONSTSEL_K0,
1691             TEVKONSTSEL_K0,
1692             false,
1693             false);
1694     }
1695 
1696     //@}
1697 
1698     //----------------------------------------
1699     //! @name 取得/設定
1700     //@{
1701 
1702     //! @brief すべての項目を設定します。
1703     //!
1704     //! @param combineRgb RGBの演算のタイプです。
1705     //! @param combineAlpha アルファの演算のタイプです。
1706     //! @param srcRgb0 RGB演算のソース 0 です。
1707     //! @param srcRgb1 RGB演算のソース 1 です。
1708     //! @param srcRgb2 RGB演算のソース 2 です。
1709     //! @param srcAlpha0 アルファ演算のソース 0 です。
1710     //! @param srcAlpha1 アルファ演算のソース 1 です。
1711     //! @param srcAlpha2 アルファ演算のソース 2 です。
1712     //! @param operandRgb0 RGB演算のソース 0 のオペランドです。
1713     //! @param operandRgb1 RGB演算のソース 1 のオペランドです。
1714     //! @param operandRgb2 RGB演算のソース 2 のオペランドです。
1715     //! @param operandAlpha0 アルファ演算のソース 0 のオペランドです。
1716     //! @param operandAlpha1 アルファ演算のソース 1 のオペランドです。
1717     //! @param operandAlpha2 アルファ演算のソース 2 のオペランドです。
1718     //! @param scaleRgb RGB演算に対するスケールです。
1719     //! @param scaleAlpha アルファ演算に対するスケールです。
1720     //! @param konstSelRgb RGB演算で使用する定数レジスタのソースです。
1721     //! @param konstSelAlpha アルファ演算で使用する定数レジスタのソースです。
1722     //! @param savePrevRgb 前段の演算結果(RGB)をバッファに保存する場合は true を指定します。
1723     //! @param savePrevAlpha 前段の演算結果(A)をバッファに保存する場合は true を指定します。
1724     //!
1725     //! @since 2009/09/18 初版。
1726     //!
SetTevStage1727     void Set(
1728         TevMode         combineRgb,
1729         TevMode         combineAlpha,
1730         TevSrc          srcRgb0,
1731         TevSrc          srcRgb1,
1732         TevSrc          srcRgb2,
1733         TevSrc          srcAlpha0,
1734         TevSrc          srcAlpha1,
1735         TevSrc          srcAlpha2,
1736         TevOpRgb        operandRgb0,
1737         TevOpRgb        operandRgb1,
1738         TevOpRgb        operandRgb2,
1739         TevOpAlp        operandAlpha0,
1740         TevOpAlp        operandAlpha1,
1741         TevOpAlp        operandAlpha2,
1742         TevScale        scaleRgb,
1743         TevScale        scaleAlpha,
1744         TevKonstSel     konstSelRgb,
1745         TevKonstSel     konstSelAlpha,
1746         bool            savePrevRgb,
1747         bool            savePrevAlpha
1748     )
1749     {
1750         SetCombineRgb(combineRgb);
1751         SetCombineAlpha(combineAlpha);
1752         SetSrcRgb0(srcRgb0);
1753         SetSrcRgb1(srcRgb1);
1754         SetSrcRgb2(srcRgb2);
1755         SetSrcAlpha0(srcAlpha0);
1756         SetSrcAlpha1(srcAlpha1);
1757         SetSrcAlpha2(srcAlpha2);
1758         SetOperandRgb0(operandRgb0);
1759         SetOperandRgb1(operandRgb1);
1760         SetOperandRgb2(operandRgb2);
1761         SetOperandAlpha0(operandAlpha0);
1762         SetOperandAlpha1(operandAlpha1);
1763         SetOperandAlpha2(operandAlpha2);
1764         SetScaleRgb(scaleRgb);
1765         SetScaleAlpha(scaleAlpha);
1766         SetKonstSelRgb(konstSelRgb);
1767         SetKonstSelAlpha(konstSelAlpha);
1768         SetSavePrevRgb(savePrevRgb);
1769         SetSavePrevAlpha(savePrevAlpha);
1770     }
1771 
1772     //! @brief RGBの演算のタイプを設定します。
1773     //!
1774     //! @param value 設定する値です。
1775     //!
1776     //! @since 2009/09/18 初版。
1777     //!
SetCombineRgbTevStage1778     void SetCombineRgb(TevMode value)
1779     {
1780         NW_ASSERT(value < TEVMODE_MAX);
1781         bits0 = internal::SetBits(u32(bits0), POS0_COMBINERGB, BITS_COMBINERGB, u32(value));
1782     }
1783 
1784     //! @brief アルファの演算のタイプを設定します。
1785     //!
1786     //! @param value 設定する値です。
1787     //!
1788     //! @since 2009/09/18 初版。
1789     //!
SetCombineAlphaTevStage1790     void SetCombineAlpha(TevMode value)
1791     {
1792         NW_ASSERT(value < TEVMODE_MAX);
1793         bits1 = internal::SetBits(u32(bits1), POS1_COMBINEALPHA, BITS_COMBINEALPHA, u32(value));
1794     }
1795 
1796     //! @brief RGB演算のソース 0 を設定します。
1797     //!
1798     //! @param value 設定する値です。
1799     //!
1800     //! @since 2009/09/18 初版。
1801     //!
SetSrcRgb0TevStage1802     void SetSrcRgb0(TevSrc value)
1803     {
1804         NW_ASSERT(value < TEVSRC_MAX);
1805         bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB0, BITS_SRCRGB, u32(value));
1806     }
1807 
1808     //! @brief RGB演算のソース 1 を設定します。
1809     //!
1810     //! @param value 設定する値です。
1811     //!
1812     //! @since 2009/09/18 初版。
1813     //!
SetSrcRgb1TevStage1814     void SetSrcRgb1(TevSrc value)
1815     {
1816         NW_ASSERT(value < TEVSRC_MAX);
1817         bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB1, BITS_SRCRGB, u32(value));
1818     }
1819 
1820     //! @brief RGB演算のソース 2 を設定します。
1821     //!
1822     //! @param value 設定する値です。
1823     //!
1824     //! @since 2009/09/18 初版。
1825     //!
SetSrcRgb2TevStage1826     void SetSrcRgb2(TevSrc value)
1827     {
1828         NW_ASSERT(value < TEVSRC_MAX);
1829         bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB2, BITS_SRCRGB, u32(value));
1830     }
1831 
1832     //! @brief アルファ演算のソース 0 を設定します。
1833     //!
1834     //! @param value 設定する値です。
1835     //!
1836     //! @since 2009/09/18 初版。
1837     //!
SetSrcAlpha0TevStage1838     void SetSrcAlpha0(TevSrc value)
1839     {
1840         NW_ASSERT(value < TEVSRC_MAX);
1841         bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA0, BITS_SRCALPHA, u32(value));
1842     }
1843 
1844     //! @brief アルファ演算のソース 1 を設定します。
1845     //!
1846     //! @param value 設定する値です。
1847     //!
1848     //! @since 2009/09/18 初版。
1849     //!
SetSrcAlpha1TevStage1850     void SetSrcAlpha1(TevSrc value)
1851     {
1852         NW_ASSERT(value < TEVSRC_MAX);
1853         bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA1, BITS_SRCALPHA, u32(value));
1854     }
1855 
1856     //! @brief アルファ演算のソース 2 を設定します。
1857     //!
1858     //! @param value 設定する値です。
1859     //!
1860     //! @since 2009/09/18 初版。
1861     //!
SetSrcAlpha2TevStage1862     void SetSrcAlpha2(TevSrc value)
1863     {
1864         NW_ASSERT(value < TEVSRC_MAX);
1865         bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA2, BITS_SRCALPHA, u32(value));
1866     }
1867 
1868     //! @brief RGB演算のソース 0 のオペランドを設定します。
1869     //!
1870     //! @param value 設定する値です。
1871     //!
1872     //! @since 2009/09/18 初版。
1873     //!
SetOperandRgb0TevStage1874     void SetOperandRgb0(TevOpRgb value)
1875     {
1876         NW_ASSERT(value < TEVOPRGB_MAX);
1877         bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB0, BITS_OPERANDRGB, u32(value));
1878     }
1879 
1880     //! @brief RGB演算のソース 1 のオペランドを設定します。
1881     //!
1882     //! @param value 設定する値です。
1883     //!
1884     //! @since 2009/09/18 初版。
1885     //!
SetOperandRgb1TevStage1886     void SetOperandRgb1(TevOpRgb value)
1887     {
1888         NW_ASSERT(value < TEVOPRGB_MAX);
1889         bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB1, BITS_OPERANDRGB, u32(value));
1890     }
1891 
1892     //! @brief RGB演算のソース 2 のオペランドを設定します。
1893     //!
1894     //! @param value 設定する値です。
1895     //!
1896     //! @since 2009/09/18 初版。
1897     //!
SetOperandRgb2TevStage1898     void SetOperandRgb2(TevOpRgb value)
1899     {
1900         NW_ASSERT(value < TEVOPRGB_MAX);
1901         bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB2, BITS_OPERANDRGB, u32(value));
1902     }
1903 
1904     //! @brief アルファ演算のソース 0 のオペランドを設定します。
1905     //!
1906     //! @param value 設定する値です。
1907     //!
1908     //! @since 2009/09/18 初版。
1909     //!
SetOperandAlpha0TevStage1910     void SetOperandAlpha0(TevOpAlp value)
1911     {
1912         NW_ASSERT(value < TEVOPALP_MAX);
1913         bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA0, BITS_OPERANDALPHA, u32(value));
1914     }
1915 
1916     //! @brief アルファ演算のソース 1 のオペランドを設定します。
1917     //!
1918     //! @param value 設定する値です。
1919     //!
1920     //! @since 2009/09/18 初版。
1921     //!
SetOperandAlpha1TevStage1922     void SetOperandAlpha1(TevOpAlp value)
1923     {
1924         NW_ASSERT(value < TEVOPALP_MAX);
1925         bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA1, BITS_OPERANDALPHA, u32(value));
1926     }
1927 
1928     //! @brief アルファ演算のソース 2 のオペランドを設定します。
1929     //!
1930     //! @param value 設定する値です。
1931     //!
1932     //! @since 2009/09/18 初版。
1933     //!
SetOperandAlpha2TevStage1934     void SetOperandAlpha2(TevOpAlp value)
1935     {
1936         NW_ASSERT(value < TEVOPALP_MAX);
1937         bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA2, BITS_OPERANDALPHA, u32(value));
1938     }
1939 
1940     //! @brief RGB演算に対するスケールを設定します。
1941     //!
1942     //! @param value 設定する値です。
1943     //!
1944     //! @since 2009/09/18 初版。
1945     //!
SetScaleRgbTevStage1946     void SetScaleRgb(TevScale value)
1947     {
1948         NW_ASSERT(value < TEVSCALE_MAX);
1949         bits0 = internal::SetBits(u32(bits0), POS0_SCALERGB, BITS_SCALE, u32(value));
1950     }
1951 
1952     //! @brief アルファ演算に対するスケールを設定します。
1953     //!
1954     //! @param value 設定する値です。
1955     //!
1956     //! @since 2009/09/18 初版。
1957     //!
SetScaleAlphaTevStage1958     void SetScaleAlpha(TevScale value)
1959     {
1960         NW_ASSERT(value < TEVSCALE_MAX);
1961         bits1 = internal::SetBits(u32(bits1), POS1_SCALEALPHA, BITS_SCALE, u32(value));
1962     }
1963 
1964     //! @brief RGB演算で使用する定数レジスタのソースを設定します。
1965     //!
1966     //! @param value 設定する値です。
1967     //!
1968     //! @since 2009/09/18 初版。
1969     //!
SetKonstSelRgbTevStage1970     void SetKonstSelRgb(TevKonstSel value)
1971     {
1972         NW_ASSERT(value < TEVKONSTSEL_MAX);
1973         bits2 = internal::SetBits(u32(bits2), POS2_KONSTSELRGB, BITS_KONSTSEL, u32(value));
1974     }
1975 
1976     //! @brief アルファ演算で使用する定数レジスタのソースを設定します。
1977     //!
1978     //! @param value 設定する値です。
1979     //!
1980     //! @since 2009/09/18 初版。
1981     //!
SetKonstSelAlphaTevStage1982     void SetKonstSelAlpha(TevKonstSel value)
1983     {
1984         NW_ASSERT(value < TEVKONSTSEL_MAX);
1985         bits2 = internal::SetBits(u32(bits2), POS2_KONSTSELALPHA, BITS_KONSTSEL, u32(value));
1986     }
1987 
1988     //! @brief 前段の演算結果(RGB)をバッファに保存するか設定します。
1989     //!
1990     //! @param value 設定する値です。
1991     //!
1992     //! @since 2009/09/18 初版。
1993     //!
SetSavePrevRgbTevStage1994     void SetSavePrevRgb(bool value)
1995     {
1996         bits0 = internal::SetBit(u32(bits0), POS0_SAVEPREVRGB, value);
1997     }
1998 
1999     //! @brief 前段の演算結果(A)をバッファに保存するか設定します。
2000     //!
2001     //! @param value 設定する値です。
2002     //!
2003     //! @since 2009/09/18 初版。
2004     //!
SetSavePrevAlphaTevStage2005     void SetSavePrevAlpha(bool value)
2006     {
2007         bits1 = internal::SetBit(u32(bits1), POS1_SAVEPREVALPHA, value);
2008     }
2009 
2010     //! @brief RGBの演算のタイプを取得します。
2011     //!
2012     //! @return 現在の設定値を返します。
2013     //!
2014     //! @since 2009/09/18 初版。
2015     //!
GetCombineRgbTevStage2016     TevMode GetCombineRgb() const
2017     {
2018         return TevMode(internal::GetBits(u32(bits0), POS0_COMBINERGB, BITS_COMBINERGB));
2019     }
2020 
2021     //! @brief アルファの演算のタイプを取得します。
2022     //!
2023     //! @return 現在の設定値を返します。
2024     //!
2025     //! @since 2009/09/18 初版。
2026     //!
GetCombineAlphaTevStage2027     TevMode GetCombineAlpha() const
2028     {
2029         return TevMode(internal::GetBits(u32(bits1), POS1_COMBINEALPHA, BITS_COMBINEALPHA));
2030     }
2031 
2032     //! @brief RGB演算の入力 0 のソースを取得します。
2033     //!
2034     //! @return 現在の設定値を返します。
2035     //!
2036     //! @since 2009/09/18 初版。
2037     //!
GetSrcRgb0TevStage2038     TevSrc GetSrcRgb0() const
2039     {
2040         return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB0, BITS_SRCRGB));
2041     }
2042 
2043     //! @brief RGB演算の入力 1 のソースを取得します。
2044     //!
2045     //! @return 現在の設定値を返します。
2046     //!
2047     //! @since 2009/09/18 初版。
2048     //!
GetSrcRgb1TevStage2049     TevSrc GetSrcRgb1() const
2050     {
2051         return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB1, BITS_SRCRGB));
2052     }
2053 
2054     //! @brief RGB演算の入力 2 のソースを取得します。
2055     //!
2056     //! @return 現在の設定値を返します。
2057     //!
2058     //! @since 2009/09/18 初版。
2059     //!
GetSrcRgb2TevStage2060     TevSrc GetSrcRgb2() const
2061     {
2062         return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB2, BITS_SRCRGB));
2063     }
2064 
2065     //! @brief アルファ演算の入力 0 のソースを取得します。
2066     //!
2067     //! @return 現在の設定値を返します。
2068     //!
2069     //! @since 2009/09/18 初版。
2070     //!
GetSrcAlpha0TevStage2071     TevSrc GetSrcAlpha0() const
2072     {
2073         return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA0, BITS_SRCALPHA));
2074     }
2075 
2076     //! @brief アルファ演算の入力 1 のソースを取得します。
2077     //!
2078     //! @return 現在の設定値を返します。
2079     //!
2080     //! @since 2009/09/18 初版。
2081     //!
GetSrcAlpha1TevStage2082     TevSrc GetSrcAlpha1() const
2083     {
2084         return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA1, BITS_SRCALPHA));
2085     }
2086 
2087     //! @brief アルファ演算の入力 2 のソースを取得します。
2088     //!
2089     //! @return 現在の設定値を返します。
2090     //!
2091     //! @since 2009/09/18 初版。
2092     //!
GetSrcAlpha2TevStage2093     TevSrc GetSrcAlpha2() const
2094     {
2095         return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA2, BITS_SRCALPHA));
2096     }
2097 
2098     //! @brief RGB演算の入力 0 のオペランドを取得します。
2099     //!
2100     //! @return 現在の設定値を返します。
2101     //!
2102     //! @since 2009/09/18 初版。
2103     //!
GetOperandRgb0TevStage2104     TevOpRgb GetOperandRgb0() const
2105     {
2106         return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB0, BITS_OPERANDRGB));
2107     }
2108 
2109     //! @brief RGB演算の入力 1 のオペランドを取得します。
2110     //!
2111     //! @return 現在の設定値を返します。
2112     //!
2113     //! @since 2009/09/18 初版。
2114     //!
GetOperandRgb1TevStage2115     TevOpRgb GetOperandRgb1() const
2116     {
2117         return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB1, BITS_OPERANDRGB));
2118     }
2119 
2120     //! @brief RGB演算の入力 2 のオペランドを取得します。
2121     //!
2122     //! @return 現在の設定値を返します。
2123     //!
2124     //! @since 2009/09/18 初版。
2125     //!
GetOperandRgb2TevStage2126     TevOpRgb GetOperandRgb2() const
2127     {
2128         return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB2, BITS_OPERANDRGB));
2129     }
2130 
2131     //! @brief アルファ演算の入力 0 のオペランドを取得します。
2132     //!
2133     //! @return 現在の設定値を返します。
2134     //!
2135     //! @since 2009/09/18 初版。
2136     //!
GetOperandAlpha0TevStage2137     TevOpAlp GetOperandAlpha0() const
2138     {
2139         return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA0, BITS_OPERANDALPHA));
2140     }
2141 
2142     //! @brief アルファ演算の入力 1 のオペランドを取得します。
2143     //!
2144     //! @return 現在の設定値を返します。
2145     //!
2146     //! @since 2009/09/18 初版。
2147     //!
GetOperandAlpha1TevStage2148     TevOpAlp GetOperandAlpha1() const
2149     {
2150         return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA1, BITS_OPERANDALPHA));
2151     }
2152 
2153     //! @brief アルファ演算の入力 2 のオペランドを取得します。
2154     //!
2155     //! @return 現在の設定値を返します。
2156     //!
2157     //! @since 2009/09/18 初版。
2158     //!
GetOperandAlpha2TevStage2159     TevOpAlp GetOperandAlpha2() const
2160     {
2161         return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA2, BITS_OPERANDALPHA));
2162     }
2163 
2164     //! @brief RGB演算に対するスケールを取得します。
2165     //!
2166     //! @return 現在の設定値を返します。
2167     //!
2168     //! @since 2009/09/18 初版。
2169     //!
GetScaleRgbTevStage2170     TevScale GetScaleRgb() const
2171     {
2172         return TevScale(internal::GetBits(u32(bits0), POS0_SCALERGB, BITS_SCALE));
2173     }
2174 
2175     //! @brief アルファ演算に対するスケールを取得します。
2176     //!
2177     //! @return 現在の設定値を返します。
2178     //!
2179     //! @since 2009/09/18 初版。
2180     //!
GetScaleAlphaTevStage2181     TevScale GetScaleAlpha() const
2182     {
2183         return TevScale(internal::GetBits(u32(bits1), POS1_SCALEALPHA, BITS_SCALE));
2184     }
2185 
2186     //! @brief RGB演算で使用する定数レジスタのソースを取得します。
2187     //!
2188     //! @return 現在の設定値を返します。
2189     //!
2190     //! @since 2009/09/18 初版。
2191     //!
GetKonstSelRgbTevStage2192     TevKonstSel GetKonstSelRgb() const
2193     {
2194         return TevKonstSel(internal::GetBits(u32(bits2), POS2_KONSTSELRGB, BITS_KONSTSEL));
2195     }
2196 
2197     //! @brief アルファ演算で使用する定数レジスタのソースを取得します。
2198     //!
2199     //! @return 現在の設定値を返します。
2200     //!
2201     //! @since 2009/09/18 初版。
2202     //!
GetKonstSelAlphaTevStage2203     TevKonstSel GetKonstSelAlpha() const
2204     {
2205         return TevKonstSel(internal::GetBits(u32(bits2), POS2_KONSTSELALPHA, BITS_KONSTSEL));
2206     }
2207 
2208     //! @brief 前段の演算結果(RGB)をバッファに保存するかの設定を取得します。
2209     //!
2210     //! @return 現在の設定値を返します。
2211     //!
2212     //! @since 2009/09/18 初版。
2213     //!
GetSavePrevRgbTevStage2214     bool GetSavePrevRgb() const
2215     {
2216         return internal::TestBit(u32(bits0), POS0_SAVEPREVRGB);
2217     }
2218 
2219 
2220     //! @brief 前段の演算結果(A)をバッファに保存するかの設定を取得します。
2221     //!
2222     //! @return 現在の設定値を返します。
2223     //!
2224     //! @since 2009/09/18 初版。
2225     //!
GetSavePrevAlphaTevStage2226     bool GetSavePrevAlpha() const
2227     {
2228         return internal::TestBit(u32(bits1), POS1_SAVEPREVALPHA);
2229     }
2230 
2231     //@}
2232 
2233 private:
2234     ut::ResU32          bits0;
2235     ut::ResU32          bits1;
2236     ut::ResU32          bits2;
2237 
2238 private:
2239     enum Bits
2240     {
2241         BITS_COMBINERGB     = 4,
2242         BITS_COMBINEALPHA   = 4,
2243         BITS_SRCRGB         = 4,
2244         BITS_SRCALPHA       = 4,
2245         BITS_OPERANDRGB     = 4,
2246         BITS_OPERANDALPHA   = 4, // at least 3
2247         BITS_SCALE          = 2,
2248         BITS_KONSTSEL       = 4,
2249         BITS_SAVEPREV       = 1
2250     };
2251 
2252     enum Pos0
2253     {
2254         POS0_SRCRGB0        = 0,
2255         POS0_SRCRGB1        = 4,
2256         POS0_SRCRGB2        = 8,
2257         POS0_OPERANDRGB0    = 12,
2258         POS0_OPERANDRGB1    = 16,
2259         POS0_OPERANDRGB2    = 20,
2260         POS0_COMBINERGB     = 24,
2261         POS0_SCALERGB       = 28,
2262         POS0_SAVEPREVRGB    = 30,
2263 
2264         FIELD0_SIZE         = 31
2265     };
2266 
2267     enum Pos1
2268     {
2269         POS1_SRCALPHA0      = 0,
2270         POS1_SRCALPHA1      = 4,
2271         POS1_SRCALPHA2      = 8,
2272         POS1_OPERANDALPHA0  = 12,
2273         POS1_OPERANDALPHA1  = 16,
2274         POS1_OPERANDALPHA2  = 20,
2275         POS1_COMBINEALPHA   = 24,
2276         POS1_SCALEALPHA     = 28,
2277         POS1_SAVEPREVALPHA  = 30,
2278 
2279         FIELD1_SIZE         = 31
2280     };
2281 
2282     enum Pos2
2283     {
2284         POS2_KONSTSELRGB    = 0,
2285         POS2_KONSTSELALPHA  = 4,
2286 
2287         FIELD2_SIZE         = 8
2288     };
2289 
2290     static void CompileCheck();
2291 };
2292 
2293 //---------------------------------------------------------------------------
2294 //! :category 描画
2295 //!
2296 //! @brief アルファコンペアの設定を持つ構造体です。
2297 //!
2298 //! @since 2009/09/18 初版。
2299 //---------------------------------------------------------------------------
2300 struct AlphaCompare
2301 {
2302     //----------------------------------------
2303     //! @name コンストラクタ/デストラクタ
2304     //@{
2305 
2306     //! @brief コンストラクタです。
2307     //!
2308     //! @details
2309     //! 常に通過する設定で初期化します。
2310     //!
2311     //! @since 2009/09/18 初版。
2312     //!
AlphaCompareAlphaCompare2313     AlphaCompare()
2314     {
2315         Set(ALPHATEST_ALWAYS, 0.f);
2316     }
2317 
2318     //! @brief コンストラクタです。
2319     //!
2320     //! @details
2321     //! 指定の設定で初期化します。
2322     //!
2323     //! @param aFunc 比較の条件です。
2324     //! @param aRef 比較の対象値です。
2325     //!
2326     //! @since 2009/09/18 初版。
2327     //!
AlphaCompareAlphaCompare2328     AlphaCompare(
2329         AlphaTest   aFunc,
2330         f32         aRef
2331     )
2332     {
2333         Set(aFunc, aRef);
2334     }
2335 
2336     //@}
2337 
2338     //----------------------------------------
2339     //! @name 設定/取得
2340     //@{
2341 
2342     //! @brief 設定を変更します
2343     //!
2344     //! @param aFunc 比較の条件です。
2345     //! @param aRef 比較の対象値です。
2346     //!
2347     //! @since 2009/09/18 初版。
2348     //!
SetAlphaCompare2349     void Set(
2350         AlphaTest   aFunc,
2351         f32         aRef
2352     )
2353     {
2354         NW_ASSERT(0 <= aFunc && aFunc < ALPHATEST_MAX);
2355 
2356         func = u8(aFunc);
2357         ref = aRef;
2358     }
2359 
2360     //! @brief アルファ比較の条件を取得します。
2361     //!
2362     //! @return 設定値を返します。
2363     //!
2364     //! @since 2009/09/18 初版。
2365     //!
GetFuncAlphaCompare2366     AlphaTest GetFunc() const
2367     {
2368         return AlphaTest(func);
2369     }
2370 
2371     //! @brief アルファ比較の対象の値を取得します。
2372     //!
2373     //! @return 設定値を返します。
2374     //!
2375     //! @since 2009/09/18 初版。
2376     //!
GetRefAlphaCompare2377     f32 GetRef() const
2378     {
2379         return ref;
2380     }
2381 
2382     //@}
2383 
2384 private:
2385     u8 func;
2386     ut::ResF32 ref;
2387 };
2388 
2389 //---------------------------------------------------------------------------
2390 //! :category 描画
2391 //!
2392 //! @brief ブレンドモードの設定を持つ構造体です。
2393 //!
2394 //! @since 2009/09/18 初版。
2395 //---------------------------------------------------------------------------
2396 struct BlendMode
2397 {
2398     //----------------------------------------
2399     //! @name コンストラクタ/デストラクタ
2400     //@{
2401 
2402     //! @brief コンストラクタです。
2403     //!
2404     //! @details
2405     //! ブレンドを行わない(上書き)で初期化します。
2406     //!
2407     //! @since 2009/09/18 初版。
2408     //!
BlendModeBlendMode2409     BlendMode()
2410     {
2411         Set(
2412             BLENDOP_DISABLE,
2413             BLENDFACTORSRC_SRC_ALPHA,
2414             BLENDFACTORDST_INV_SRC_ALPHA,
2415             LOGICOP_DISABLE);
2416     }
2417 
2418     //! @brief コンストラクタです。
2419     //!
2420     //! @details
2421     //! 指定の設定で初期化します。
2422     //!
2423     //! @param aBlendOp ブレンド演算のタイプを指定します。
2424     //! @param aSrcFactor ピクセルカラーに乗算する値を指定します。
2425     //! @param aDstFactor フレームバッファカラーに乗算する値を指定します。
2426     //! @param aLogicOp  論理演算のタイプを指定します。
2427     //!
2428     //! @since 2009/09/18 初版。
2429     //!
BlendModeBlendMode2430     BlendMode(
2431         BlendOp         aBlendOp,
2432         BlendFactorSrc  aSrcFactor,
2433         BlendFactorDst  aDstFactor,
2434         LogicOp         aLogicOp
2435     )
2436     {
2437         Set(aBlendOp, aSrcFactor, aDstFactor, aLogicOp);
2438     }
2439 
2440     //@}
2441 
2442     //----------------------------------------
2443     //! @name 設定/取得
2444     //@{
2445 
2446     //! @brief 設定を変更します。
2447     //!
2448     //! @param aBlendOp ブレンド演算のタイプを指定します。
2449     //! @param aSrcFactor ピクセルカラーに乗算する値を指定します。
2450     //! @param aDstFactor フレームバッファカラーに乗算する値を指定します。
2451     //! @param aLogicOp  論理演算のタイプを指定します。
2452     //!
2453     //! @since 2009/09/18 初版。
2454     //!
SetBlendMode2455     void Set(
2456         BlendOp         aBlendOp,
2457         BlendFactorSrc  aSrcFactor,
2458         BlendFactorDst  aDstFactor,
2459         LogicOp         aLogicOp
2460     )
2461     {
2462         blendOp = u8(aBlendOp);
2463         srcFactor = u8(aSrcFactor);
2464         dstFactor = u8(aDstFactor);
2465         logicOp = u8(aLogicOp);
2466     }
2467 
2468     //! @brief ブレンド演算のタイプを取得します。
2469     //!
2470     //! @return 現在の設定値を返します。
2471     //!
2472     //! @since 2009/09/18 初版。
2473     //!
GetBlendOpBlendMode2474     BlendOp GetBlendOp() const
2475     {
2476         return BlendOp(blendOp);
2477     }
2478 
2479     //! @brief ピクセルカラーに乗算する値を取得します。
2480     //!
2481     //! @return 現在の設定値を返します。
2482     //!
2483     //! @since 2009/09/18 初版。
2484     //!
GetSrcFactorBlendMode2485     BlendFactorSrc GetSrcFactor() const
2486     {
2487         return BlendFactorSrc(srcFactor);
2488     }
2489 
2490     //! @brief フレームバッファカラーに乗算する値を取得します。
2491     //!
2492     //! @return 現在の設定値を返します。
2493     //!
2494     //! @since 2009/09/18 初版。
2495     //!
GetDstFactorBlendMode2496     BlendFactorDst GetDstFactor() const
2497     {
2498         return BlendFactorDst(dstFactor);
2499     }
2500 
2501     //! @brief 論理演算のタイプを取得します。
2502     //!
2503     //! @return 現在の設定値を返します。
2504     //!
2505     //! @since 2009/09/18 初版。
2506     //!
GetLogicOpBlendMode2507     LogicOp GetLogicOp() const
2508     {
2509         return LogicOp(logicOp);
2510     }
2511 
2512     //@}
2513 
2514 private:
2515     ut::ResU8           blendOp;
2516     ut::ResU8           srcFactor;
2517     ut::ResU8           dstFactor;
2518     ut::ResU8           logicOp;
2519 };
2520 
2521 //---------------------------------------------------------------------------
2522 //! :category 描画
2523 //!
2524 //! @brief ペインの各辺の拡大量を持つ構造体です。
2525 //!
2526 //! @since 2009/09/18 初版。
2527 //---------------------------------------------------------------------------
2528 struct InflationLRTB
2529 {
2530     ut::ResF32          l; //!< 左辺の拡大量です。
2531     ut::ResF32          r; //!< 右辺の拡大量です。
2532     ut::ResF32          t; //!< 上辺の拡大量です。
2533     ut::ResF32          b; //!< 下辺の拡大量です。
2534 };
2535 
2536 //---------------------------------------------------------------------------
2537 //! :category 描画
2538 //!
2539 //! @brief ウィンドウペインのフレーム(枠)のサイズを持つ構造体です。
2540 //!
2541 //! @since 2009/09/18 初版。
2542 //---------------------------------------------------------------------------
2543 struct WindowFrameSize
2544 {
2545     ut::ResF32          l; //!< 左辺の枠の幅です。
2546     ut::ResF32          r; //!< 右辺の枠の幅です。
2547     ut::ResF32          t; //!< 上辺の枠の高さです。
2548     ut::ResF32          b; //!< 下辺の枠の高さです。
2549 };
2550 
2551 //---------------------------------------------------------------------------
2552 //! :category リソースアクセサ
2553 //!
2554 //! @brief 拡張ユーザデータクラスです。
2555 //!
2556 //! @details
2557 //! 名前文字列とデータがオブジェクトに続いて格納されます。
2558 //!
2559 //! @sa Pane
2560 //! @sa res::ExtUserDataList
2561 //!
2562 //! @since 2009/09/18 初版。
2563 //---------------------------------------------------------------------------
2564 class ExtUserData
2565 {
2566 public:
2567     //----------------------------------------
2568     //! @name コンストラクタ/デストラクタ
2569     //@{
2570 
2571     //! @brief コンストラクタです。
2572     //!
2573     //! @param nameStrOffset 拡張ユーザデータの名前へのオフセットです(オブジェクト先頭から)。
2574     //! @param dataOffset 拡張ユーザデータへのオフセットです(オブジェクト先頭から)。
2575     //! @param num 拡張ユーザデータの個数です。
2576     //! @param type 拡張ユーザデータのデータタイプです。
2577     //!
2578     //! @since 2009/09/18 初版。
2579     //!
ExtUserData(u32 nameStrOffset,u32 dataOffset,u16 num,u8 type)2580     ExtUserData(u32 nameStrOffset, u32 dataOffset, u16 num, u8 type)
2581         : m_NameStrOffset(nameStrOffset),
2582           m_DataOffset(dataOffset),
2583           m_Num(num),
2584           m_Type(type),
2585           m_Padding(0)
2586     {}
2587 
2588     //@}
2589 
2590     //----------------------------------------
2591     //! @name 設定/取得
2592     //@{
2593 
2594     //! @brief 拡張ユーザデータの名前を取得します。
2595     //!
2596     //! @return 拡張ユーザデータに設定されている名前を返します。
2597     //!
2598     //! @since 2009/09/18 初版。
2599     //!
GetName()2600     const char* GetName() const
2601     {
2602         return m_NameStrOffset ? internal::ConvertOffsToPtr<const char>(this, m_NameStrOffset): 0;
2603     }
2604 
2605     //! @brief 拡張ユーザデータの型を取得します。
2606     //!
2607     //! @details
2608     //! 文字列、整数配列、浮動小数点数配列のいずれかになります。
2609     //!
2610     //! @return データタイプを返します。
2611     //!
2612     //! @since 2009/09/18 初版。
2613     //!
GetType()2614     ExtUserDataType GetType() const
2615     {
2616         return ExtUserDataType(m_Type);
2617     }
2618 
2619     //! @brief 拡張ユーザデータの個数を取得します。
2620     //!
2621     //! @details
2622     //! データのタイプが文字列の場合は、文字列の長さになります。
2623     //!
2624     //! データのタイプが整数配列の場合は、配列の要素数になります。
2625     //!
2626     //! データのタイプが浮動小数点数配列の場合は、配列の要素数になります。
2627     //!
2628     //! @return データの個数を返します。
2629     //!
2630     //! @since 2009/09/18 初版。
2631     //!
GetNum()2632     u16 GetNum() const
2633     {
2634         return m_Num;
2635     }
2636 
2637     //! @brief 拡張ユーザデータを文字列として取得します。
2638     //!
2639     //! @details
2640     //! データのタイプが文字列である場合に有効です。
2641     //!
2642     //! @return 文字列のポインタを返します。
2643     //!
2644     //! @since 2009/09/18 初版。
2645     //!
GetString()2646     const char* GetString() const
2647     {
2648         NW_ASSERT(GetType() == EXTUSERDATATYPE_STRING);
2649         return internal::ConvertOffsToPtr<const char>(this, m_DataOffset);
2650     }
2651 
2652     //! @brief 拡張ユーザデータを整数配列として取得します。
2653     //!
2654     //! @details
2655     //! データのタイプが整数配列である場合に有効です。
2656     //!
2657     //! @return ResS32配列の先頭要素のポインタを返します。
2658     //!
2659     //! @since 2009/09/18 初版。
2660     //!
GetIntArray()2661     const ut::ResS32* GetIntArray() const
2662     {
2663         NW_ASSERT(GetType() == EXTUSERDATATYPE_INT);
2664         return internal::ConvertOffsToPtr<const ut::ResS32>(this, m_DataOffset);
2665     }
2666 
2667     //! @brief 拡張ユーザデータを浮動小数点数配列として取得します。
2668     //!
2669     //! @details
2670     //! データのタイプが浮動小数点配列である場合に有効です。
2671     //!
2672     //! @return ResF32配列の先頭要素のポインタを返します。
2673     //!
2674     //! @since 2009/09/18 初版。
2675     //!
GetFloatArray()2676     const ut::ResF32* GetFloatArray() const
2677     {
2678         NW_ASSERT(GetType() == EXTUSERDATATYPE_FLOAT);
2679         return internal::ConvertOffsToPtr<const ut::ResF32>(this, m_DataOffset);
2680     }
2681 
2682     //@}
2683 
2684 private:
2685     //! データ名のオブジェクトの先頭を基準にしたオフセットです。
2686     ut::ResU32 m_NameStrOffset;
2687     //! データのオブジェクトの先頭を基準にしたオフセットです。
2688     ut::ResU32 m_DataOffset;
2689 
2690     ut::ResU16 m_Num;
2691     ut::ResU8 m_Type;
2692     ut::ResU8 m_Padding;
2693 };
2694 
2695 //---------------------------------------------------------------------------
2696 //! :category アニメーション
2697 //!
2698 //! @brief アニメーション区間タグで指定されるグループの情報です。
2699 //!
2700 //! @since 2009/09/18 初版。
2701 //---------------------------------------------------------------------------
2702 struct AnimationGroupRef
2703 {
2704     //----------------------------------------
2705     //! @name コンストラクタ/デストラクタ
2706     //@{
2707 
2708     //! @brief コンストラクタです。
2709     //!
2710     //! @since 2009/09/18 初版。
2711     //!
AnimationGroupRefAnimationGroupRef2712     AnimationGroupRef()
2713     :   flag(0)
2714     {
2715         std::memset(name,    0, sizeof(name));
2716         std::memset(padding, 0, sizeof(padding));
2717     }
2718 
2719     //@}
2720 
2721     //----------------------------------------
2722     //! @name 設定/取得
2723     //@{
2724 
2725     //! @brief グループ名を取得します。
2726     //!
2727     //! @return グループ名を返します。
2728     //!
2729     //! @since 2009/09/18 初版。
2730     //!
GetNameAnimationGroupRef2731     const char* GetName() const
2732     {
2733         return name;
2734     }
2735 
2736     //@}
2737 
2738     //! グループ名です。
2739     char                name[ResourceNameStrMax + 1];
2740     //! フラグです。
2741     ut::ResU8           flag;
2742     //! (未使用です)
2743     ut::ResU8           padding[2];
2744 };
2745 
2746 //---------------------------------------------------------------------------
2747 //! :category アニメーション
2748 //!
2749 //! @brief アニメーション共有情報です。
2750 //!
2751 //! @since 2009/09/18 初版。
2752 //---------------------------------------------------------------------------
2753 struct AnimationShareInfo
2754 {
2755     //----------------------------------------
2756     //! @name コンストラクタ/デストラクタ
2757     //@{
2758 
2759     //! @brief コンストラクタです。
2760     //!
2761     //! @since 2009/09/18 初版。
2762     //!
AnimationShareInfoAnimationShareInfo2763     AnimationShareInfo()
2764     {
2765         std::memset(srcPaneName,     0, sizeof(srcPaneName));
2766         std::memset(targetGroupName, 0, sizeof(targetGroupName));
2767         std::memset(padding,         0, sizeof(padding));
2768     }
2769 
2770     //@}
2771 
2772     //----------------------------------------
2773     //! @name 設定/取得
2774     //@{
2775 
2776     //! @brief アニメーションの共有元となるペインの名前を取得します。
2777     //!
2778     //! @return ペインの名前を返します。
2779     //!
2780     //! @since 2009/09/18 初版。
2781     //!
GetSrcPaneNameAnimationShareInfo2782     const char* GetSrcPaneName() const
2783     {
2784         return srcPaneName;
2785     }
2786 
2787     //! @brief アニメーションの共有対象となるペインが登録されているグループの名前を取得します。
2788     //!
2789     //! @return グループの名前を返します。
2790     //!
2791     //! @since 2009/09/18 初版。
2792     //!
GetTargetGroupNameAnimationShareInfo2793     const char* GetTargetGroupName() const
2794     {
2795         return targetGroupName;
2796     }
2797 
2798     //@}
2799 
2800     //! アニメーションの共有元となるペインの名前です。
2801     char                srcPaneName[ResourceNameStrMax + 1];
2802     //! アニメーションの共有対象となるペインが登録されているグループの名前です。
2803     char                targetGroupName[ResourceNameStrMax + 1];
2804     //! (未使用です)
2805     ut::ResU8           padding[2];
2806 };
2807 
2808 class AnimTransform;
2809 
2810 //---------------------------------------------------------------------------
2811 //! :category アニメーション
2812 //!
2813 //! @brief アニメーションにインデックスを付加したアニメーションリンク情報です。
2814 //!
2815 //! @since 2009/09/18 初版。
2816 //---------------------------------------------------------------------------
2817 class AnimationLink
2818 {
2819 public:
2820     //----------------------------------------
2821     //! @name コンストラクタ/デストラクタ
2822     //@{
2823 
2824     //! @brief コンストラクタです。
2825     //!
2826     //! @details
2827     //! 作成時はアニメーションと結びつけられていません。
2828     //!
2829     //! @since 2009/09/18 初版。
2830     //!
AnimationLink()2831     AnimationLink()
2832     {
2833         Reset();
2834     }
2835 
2836     //!@}
2837 
2838     //----------------------------------------
2839     //! @name 取得/設定
2840     //@{
2841 
2842     //! @brief アニメーションの設定を解除します。
2843     //!
2844     //! @since 2009/09/18 初版。
2845     //!
Reset()2846     void Reset()
2847     {
2848         Set(0, 0, false);
2849     }
2850 
2851     //! @brief アニメーションの全ての設定を行います。
2852     //!
2853     //! @param animTrans  アニメーションへのポインタです。
2854     //! @param idx  インデックスです。
2855     //! @param bDisable  アニメーションを無効状態で関連付ける場合は true を指定します。
2856     //!
2857     //! @since 2009/09/18 初版。
2858     //!
Set(AnimTransform * animTrans,u16 idx,bool bDisable)2859     void Set(
2860         AnimTransform* animTrans,
2861         u16 idx,
2862         bool bDisable
2863     )
2864     {
2865         m_AnimTrans = animTrans;
2866         m_Idx = idx;
2867         m_Disable = bDisable;
2868     }
2869 
2870     //! @brief アニメーションとインデックスを設定します。
2871     //!
2872     //! @details
2873     //! アニメーションの有効/無効状態は変更しません。
2874     //!
2875     //! @param animTrans  アニメーションへのポインタです。
2876     //! @param idx  インデックスです。
2877     //!
2878     //! @since 2009/09/18 初版。
2879     //!
SetAnimTransform(AnimTransform * animTrans,u16 idx)2880     void SetAnimTransform(
2881         AnimTransform* animTrans,
2882         u16 idx
2883     )
2884     {
2885         m_AnimTrans = animTrans;
2886         m_Idx = idx;
2887     }
2888 
2889     //! @brief アニメーションを取得します。
2890     //!
2891     //! @return アニメーションへのポインタを返します。
2892     //!
2893     //! @since 2009/09/18 初版。
2894     //!
GetAnimTransform()2895     AnimTransform* GetAnimTransform() const
2896     {
2897         return m_AnimTrans;
2898     }
2899 
2900     //! @brief インデックスを取得します。
2901     //!
2902     //! @return インデックスを返します。
2903     //!
2904     //! @since 2009/09/18 初版。
2905     //!
GetIndex()2906     u16 GetIndex() const
2907     {
2908         return m_Idx;
2909     }
2910 
2911     //@}
2912 
2913     //----------------------------------------
2914     //! @name 有効/無効
2915     //@{
2916 
2917     //! @brief このアニメーションリンク情報が有効かどうかを判定します。
2918     //!
2919     //! @return 有効であれば true を、無効であれば false を返します。
2920     //!
2921     //! @sa SetEnable
2922     //!
2923     //! @since 2009/09/18 初版。
2924     //!
IsEnable()2925     bool IsEnable() const
2926     {
2927         return ! m_Disable;
2928     }
2929 
2930     //! @brief このアニメーションリンク情報を有効または無効にします。
2931     //!
2932     //! @param bEnable  有効にする場合は true を指定します。
2933     //!
2934     //! @sa IsEnable
2935     //!
2936     //! @since 2009/09/18 初版。
2937     //!
SetEnable(bool bEnable)2938     void SetEnable(bool bEnable)
2939     {
2940         m_Disable = ! bEnable;
2941     }
2942 
2943     //@}
2944 
2945     //! :private
2946     //! @brief リンク情報です。
2947     ut::LinkListNode m_Link;
2948 
2949 private:
2950     AnimTransform* m_AnimTrans;
2951     u16 m_Idx;
2952     bool m_Disable;
2953 };
2954 
2955 //! @name アニメーション
2956 //@{
2957 
2958 //! @brief アニメーションリンク情報の一覧を保持するリストの定義です。
2959 //!
2960 //! @since 2009/09/18 初版。
2961 //!
2962 typedef ut::LinkList<AnimationLink, offsetof(AnimationLink, m_Link)> AnimationList;
2963 
2964 //@}
2965 
2966 
2967 //---------------------------------------------------------------------------
2968 //! :category リソースアクセサ
2969 //!
2970 //! @brief テクスチャ情報を保持するクラスです。
2971 //!
2972 //! @sa ResourceAccessor
2973 //!
2974 //! @since 2009/09/18 初版。
2975 //---------------------------------------------------------------------------
2976 class TextureInfo
2977 {
2978 public:
2979     //! 無効なテクスチャを表します。
2980     static const u32 INVALID = 0;
2981 
2982     //----------------------------------------
2983     //! @name コンストラクタ/デストラクタ
2984     //@{
2985 
2986     //! @brief コンストラクタです。
2987     //!
2988     //! @details
2989     //! 無効なテクスチャオブジェクトへのハンドル (0) とサイズ (0, 0) で初期化します。
2990     //!
2991     //! @since 2009/09/18 初版。
2992     //!
TextureInfo()2993     TextureInfo()
2994         : m_TexObject(INVALID)
2995         , m_PhysicalAddress(NULL)
2996     {
2997     }
2998 
2999     //! @brief コピーコンストラクタです。
3000     //!
3001     //! @param src コピー元です。
3002     //!
3003     //! @since 2009/09/18 初版。
3004     //!
TextureInfo(const TextureInfo & src)3005     TextureInfo(const TextureInfo& src)
3006     {
3007         this->Set(src);
3008     }
3009 
3010     //! @brief コンストラクタです。
3011     //!
3012     //! @details
3013     //! テクスチャイメージの一部を利用する場合に使用します。
3014     //! realSize の幅と高さは2のべき乗でなければなりません。
3015     //!
3016     //! テクスチャイメージはデバイスメモリに置かれなければなりません。
3017     //!
3018     //! texObject は通常描画で使用されます。
3019     //!
3020     //! physicalAddress は Drawer の描画で使用されます。
3021     //!
3022     //! @param texObject テクスチャオブジェクトのハンドルです。
3023     //! @param physicalAddress テクスチャイメージの物理アドレスです。
3024     //! @param size 利用エリアのサイズ (幅, 高さ) です。
3025     //! @param realSize テクスチャのサイズ (幅, 高さ) です。
3026     //! @param format テクスチャのフォーマットです。
3027     //!
3028     //! @date 2010/05/14 physicalAddress 引数を追加しました。
3029     //! @date 2010/04/23 format 引数を追加しました。
3030     //! @since 2009/09/18 初版。
3031     //!
TextureInfo(u32 texObject,uptr physicalAddress,const TexSize & size,const TexSize & realSize,TexFormat format)3032     TextureInfo(
3033         u32 texObject,
3034         uptr physicalAddress,
3035         const TexSize& size,
3036         const TexSize& realSize,
3037         TexFormat format)
3038     {
3039         this->Set(texObject, physicalAddress, size, realSize, format);
3040     }
3041 
3042     //@}
3043 
3044     //----------------------------------------
3045     //! @name 設定/取得
3046     //@{
3047 
3048     //! @brief テクスチャの情報を設定します。
3049     //!
3050     //! @details
3051     //! すべての設定をコピーします。
3052     //!
3053     //! @param src コピー元です。
3054     //!
3055     //! @since 2009/09/18 初版。
3056     //!
Set(const TextureInfo & src)3057     void Set(const TextureInfo& src)
3058     {
3059         *this = src;
3060     }
3061 
3062     //! @brief テクスチャの情報を設定します。
3063     //!
3064     //! @details
3065     //! 指定の値を設定します。
3066     //!
3067     //! テクスチャイメージの一部を利用する場合に使用します。
3068     //! realSize の幅と高さは2のべき乗でなければなりません。
3069     //!
3070     //! テクスチャイメージはデバイスメモリに置かれなければなりません。
3071     //!
3072     //! texObject は通常描画で使用されます。
3073     //!
3074     //! physicalAddress は Drawer の描画で使用されます。
3075     //!
3076     //! @param texObject テクスチャオブジェクトのハンドルです。
3077     //! @param physicalAddress テクスチャイメージの物理アドレスです。
3078     //! @param size 利用エリアのサイズ (幅, 高さ) です。
3079     //! @param realSize テクスチャのサイズ (幅, 高さ) です。
3080     //! @param format テクスチャのフォーマットです。
3081     //!
3082     //! @date 2010/05/14 physicalAddress 引数を追加しました。
3083     //! @date 2010/04/23 format 引数を追加しました。
3084     //! @since 2009/09/18 初版。
3085     //!
Set(u32 texObject,uptr physicalAddress,const TexSize & size,const TexSize & realSize,TexFormat format)3086     void Set(
3087         u32 texObject,
3088         uptr physicalAddress,
3089         const TexSize& size,
3090         const TexSize& realSize,
3091         TexFormat format)
3092     {
3093         NW_ASSERT(IsPowerOfTwo(realSize.width));
3094         NW_ASSERT(IsPowerOfTwo(realSize.height));
3095 
3096         m_TexObject = texObject;
3097         m_PhysicalAddress = physicalAddress;
3098         m_Size = size;
3099         m_RealSize = realSize;
3100         m_Format = format;
3101     }
3102 
3103     //! @brief テクスチャオブジェクトを取得します。
3104     //!
3105     //! @return テクスチャオブジェクトへのハンドルを返します。
3106     //!
3107     //! @since 2009/09/18 初版。
3108     //!
GetTextureObject()3109     u32 GetTextureObject() const
3110     {
3111         return m_TexObject;
3112     }
3113 
3114     //! @brief テクスチャの利用領域のサイズ (幅, 高さ) を取得します。
3115     //!
3116     //! @return テクスチャの利用領域のサイズ (幅, 高さ) を返します。
3117     //!
3118     //! @since 2009/09/18 初版。
3119     //!
GetSize()3120     const TexSize& GetSize() const
3121     {
3122         return m_Size;
3123     }
3124 
3125     //! @brief テクスチャのサイズ (幅, 高さ) を取得します。
3126     //!
3127     //! @details
3128     //! テクスチャのサイズは幅、高さそれぞれ2のべき乗です。
3129     //!
3130     //! @return テクスチャのサイズ (幅, 高さ) を返します。
3131     //!
3132     //! @since 2009/09/18 初版。
3133     //!
GetRealSize()3134     const TexSize& GetRealSize() const
3135     {
3136         return m_RealSize;
3137     }
3138 
3139     //! @brief テクスチャの物理アドレスを取得します。
3140     //!
3141     //! @return テクスチャの物理アドレスを返します。
3142     //!
3143     //! @since 2010/05/14 初版。GetTextureImage()を置き換えました。
3144     //!
GetPhysicalAddress()3145     uptr GetPhysicalAddress() const
3146     {
3147         return m_PhysicalAddress;
3148     }
3149 
3150     //! @brief テクスチャフォーマットを取得します。
3151     //!
3152     //! @return テクスチャフォーマットを返します。
3153     //!
3154     //! @since 2010/04/23 初版。
3155     //!
GetFormat()3156     TexFormat GetFormat() const
3157     {
3158         return TexFormat(m_Format);
3159     }
3160 
3161     //! @brief テクスチャが有効か調べます。
3162     //!
3163     //! @return テクスチャが有効な場合には true を返します。
3164     //!
3165     //! @since 2010/07/16 初版。
3166     //!
IsValid()3167     bool IsValid() const
3168     {
3169 #ifdef NW_PLATFORM_CTR
3170         return m_PhysicalAddress != 0;
3171 #else
3172         return m_TexObject != INVALID;
3173 #endif
3174     }
3175 
3176     //@}
3177 
3178 private:
3179     // value が 2 のべき数であれば true を返す。
IsPowerOfTwo(u32 value)3180     static bool IsPowerOfTwo(u32 value)
3181     {
3182         return (value & ~(value - 1)) == value;
3183     }
3184 
3185     u32 m_TexObject;
3186     uptr m_PhysicalAddress;
3187     TexSize m_Size;
3188     TexSize m_RealSize;
3189     u8 m_Format;
3190 };
3191 
3192 //! @name 描画
3193 //@{
3194 
3195 //! @brief ペインの四隅のテクスチャ座標を保持する配列の定義です。
3196 typedef nw::math::VEC2 TexCoordQuad[VERTEX_MAX];
3197 
3198 //@}
3199 
3200 //! @name リソースアクセサ
3201 //@{
3202 
3203 //! 登録したフォントを表します。
3204 typedef const void* FontKey;
3205 
3206 //! 登録したテクスチャを表します。
3207 typedef const void* TextureKey;
3208 
3209 //@}
3210 
3211 } // namespace nw::lyt
3212 } // namespace nw
3213 
3214 #endif // NW_LYT_TYPES_H_
3215