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