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: 26780 $
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 protected:
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 protected:
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 protected:
1646 //! @details :private
1647 //! テクスチャ座標生成のタイプです。
1648 ut::ResU8 texGenType;
1649
1650 //! @details :private
1651 //! テクスチャ座標生成に使用するソースです。
1652 ut::ResU8 texGenSrc;
1653
1654 //! @details :private
1655 //! (未使用)
1656 ut::ResU8 reserve[2];
1657 };
1658
1659 //---------------------------------------------------------------------------
1660 //! :category 描画
1661 //!
1662 //! @brief TEV ステージの設定を持つ構造体です。
1663 //!
1664 //! @since 2009/09/18 初版。
1665 //---------------------------------------------------------------------------
1666 struct TevStage
1667 {
1668 //----------------------------------------
1669 //! @name コンストラクタ/デストラクタ
1670 //@{
1671
1672 //! @brief コンストラクタです。
1673 //!
1674 //! @since 2009/09/18 初版。
1675 //!
TevStageTevStage1676 TevStage()
1677 {
1678 Set(
1679 TEVMODE_REPLACE,
1680 TEVMODE_REPLACE,
1681 TEVSRC_PRIMARY,
1682 TEVSRC_PRIMARY,
1683 TEVSRC_PRIMARY,
1684 TEVSRC_PRIMARY,
1685 TEVSRC_PRIMARY,
1686 TEVSRC_PRIMARY,
1687 TEVOPRGB_RGB,
1688 TEVOPRGB_RGB,
1689 TEVOPRGB_RGB,
1690 TEVOPALP_ALPHA,
1691 TEVOPALP_ALPHA,
1692 TEVOPALP_ALPHA,
1693 TEVSCALE_1,
1694 TEVSCALE_1,
1695 TEVKONSTSEL_K0,
1696 TEVKONSTSEL_K0,
1697 false,
1698 false);
1699 }
1700
1701 //@}
1702
1703 //----------------------------------------
1704 //! @name 取得/設定
1705 //@{
1706
1707 //! @brief すべての項目を設定します。
1708 //!
1709 //! @param combineRgb RGBの演算のタイプです。
1710 //! @param combineAlpha アルファの演算のタイプです。
1711 //! @param srcRgb0 RGB演算のソース 0 です。
1712 //! @param srcRgb1 RGB演算のソース 1 です。
1713 //! @param srcRgb2 RGB演算のソース 2 です。
1714 //! @param srcAlpha0 アルファ演算のソース 0 です。
1715 //! @param srcAlpha1 アルファ演算のソース 1 です。
1716 //! @param srcAlpha2 アルファ演算のソース 2 です。
1717 //! @param operandRgb0 RGB演算のソース 0 のオペランドです。
1718 //! @param operandRgb1 RGB演算のソース 1 のオペランドです。
1719 //! @param operandRgb2 RGB演算のソース 2 のオペランドです。
1720 //! @param operandAlpha0 アルファ演算のソース 0 のオペランドです。
1721 //! @param operandAlpha1 アルファ演算のソース 1 のオペランドです。
1722 //! @param operandAlpha2 アルファ演算のソース 2 のオペランドです。
1723 //! @param scaleRgb RGB演算に対するスケールです。
1724 //! @param scaleAlpha アルファ演算に対するスケールです。
1725 //! @param konstSelRgb RGB演算で使用する定数レジスタのソースです。
1726 //! @param konstSelAlpha アルファ演算で使用する定数レジスタのソースです。
1727 //! @param savePrevRgb 前段の演算結果(RGB)をバッファに保存する場合は true を指定します。
1728 //! @param savePrevAlpha 前段の演算結果(A)をバッファに保存する場合は true を指定します。
1729 //!
1730 //! @since 2009/09/18 初版。
1731 //!
SetTevStage1732 void Set(
1733 TevMode combineRgb,
1734 TevMode combineAlpha,
1735 TevSrc srcRgb0,
1736 TevSrc srcRgb1,
1737 TevSrc srcRgb2,
1738 TevSrc srcAlpha0,
1739 TevSrc srcAlpha1,
1740 TevSrc srcAlpha2,
1741 TevOpRgb operandRgb0,
1742 TevOpRgb operandRgb1,
1743 TevOpRgb operandRgb2,
1744 TevOpAlp operandAlpha0,
1745 TevOpAlp operandAlpha1,
1746 TevOpAlp operandAlpha2,
1747 TevScale scaleRgb,
1748 TevScale scaleAlpha,
1749 TevKonstSel konstSelRgb,
1750 TevKonstSel konstSelAlpha,
1751 bool savePrevRgb,
1752 bool savePrevAlpha
1753 )
1754 {
1755 SetCombineRgb(combineRgb);
1756 SetCombineAlpha(combineAlpha);
1757 SetSrcRgb0(srcRgb0);
1758 SetSrcRgb1(srcRgb1);
1759 SetSrcRgb2(srcRgb2);
1760 SetSrcAlpha0(srcAlpha0);
1761 SetSrcAlpha1(srcAlpha1);
1762 SetSrcAlpha2(srcAlpha2);
1763 SetOperandRgb0(operandRgb0);
1764 SetOperandRgb1(operandRgb1);
1765 SetOperandRgb2(operandRgb2);
1766 SetOperandAlpha0(operandAlpha0);
1767 SetOperandAlpha1(operandAlpha1);
1768 SetOperandAlpha2(operandAlpha2);
1769 SetScaleRgb(scaleRgb);
1770 SetScaleAlpha(scaleAlpha);
1771 SetKonstSelRgb(konstSelRgb);
1772 SetKonstSelAlpha(konstSelAlpha);
1773 SetSavePrevRgb(savePrevRgb);
1774 SetSavePrevAlpha(savePrevAlpha);
1775 }
1776
1777 //! @brief RGBの演算のタイプを設定します。
1778 //!
1779 //! @param value 設定する値です。
1780 //!
1781 //! @since 2009/09/18 初版。
1782 //!
SetCombineRgbTevStage1783 void SetCombineRgb(TevMode value)
1784 {
1785 NW_ASSERT(value < TEVMODE_MAX);
1786 bits0 = internal::SetBits(u32(bits0), POS0_COMBINERGB, BITS_COMBINERGB, u32(value));
1787 }
1788
1789 //! @brief アルファの演算のタイプを設定します。
1790 //!
1791 //! @param value 設定する値です。
1792 //!
1793 //! @since 2009/09/18 初版。
1794 //!
SetCombineAlphaTevStage1795 void SetCombineAlpha(TevMode value)
1796 {
1797 NW_ASSERT(value < TEVMODE_MAX);
1798 bits1 = internal::SetBits(u32(bits1), POS1_COMBINEALPHA, BITS_COMBINEALPHA, u32(value));
1799 }
1800
1801 //! @brief RGB演算のソース 0 を設定します。
1802 //!
1803 //! @param value 設定する値です。
1804 //!
1805 //! @since 2009/09/18 初版。
1806 //!
SetSrcRgb0TevStage1807 void SetSrcRgb0(TevSrc value)
1808 {
1809 NW_ASSERT(value < TEVSRC_MAX);
1810 bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB0, BITS_SRCRGB, u32(value));
1811 }
1812
1813 //! @brief RGB演算のソース 1 を設定します。
1814 //!
1815 //! @param value 設定する値です。
1816 //!
1817 //! @since 2009/09/18 初版。
1818 //!
SetSrcRgb1TevStage1819 void SetSrcRgb1(TevSrc value)
1820 {
1821 NW_ASSERT(value < TEVSRC_MAX);
1822 bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB1, BITS_SRCRGB, u32(value));
1823 }
1824
1825 //! @brief RGB演算のソース 2 を設定します。
1826 //!
1827 //! @param value 設定する値です。
1828 //!
1829 //! @since 2009/09/18 初版。
1830 //!
SetSrcRgb2TevStage1831 void SetSrcRgb2(TevSrc value)
1832 {
1833 NW_ASSERT(value < TEVSRC_MAX);
1834 bits0 = internal::SetBits(u32(bits0), POS0_SRCRGB2, BITS_SRCRGB, u32(value));
1835 }
1836
1837 //! @brief アルファ演算のソース 0 を設定します。
1838 //!
1839 //! @param value 設定する値です。
1840 //!
1841 //! @since 2009/09/18 初版。
1842 //!
SetSrcAlpha0TevStage1843 void SetSrcAlpha0(TevSrc value)
1844 {
1845 NW_ASSERT(value < TEVSRC_MAX);
1846 bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA0, BITS_SRCALPHA, u32(value));
1847 }
1848
1849 //! @brief アルファ演算のソース 1 を設定します。
1850 //!
1851 //! @param value 設定する値です。
1852 //!
1853 //! @since 2009/09/18 初版。
1854 //!
SetSrcAlpha1TevStage1855 void SetSrcAlpha1(TevSrc value)
1856 {
1857 NW_ASSERT(value < TEVSRC_MAX);
1858 bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA1, BITS_SRCALPHA, u32(value));
1859 }
1860
1861 //! @brief アルファ演算のソース 2 を設定します。
1862 //!
1863 //! @param value 設定する値です。
1864 //!
1865 //! @since 2009/09/18 初版。
1866 //!
SetSrcAlpha2TevStage1867 void SetSrcAlpha2(TevSrc value)
1868 {
1869 NW_ASSERT(value < TEVSRC_MAX);
1870 bits1 = internal::SetBits(u32(bits1), POS1_SRCALPHA2, BITS_SRCALPHA, u32(value));
1871 }
1872
1873 //! @brief RGB演算のソース 0 のオペランドを設定します。
1874 //!
1875 //! @param value 設定する値です。
1876 //!
1877 //! @since 2009/09/18 初版。
1878 //!
SetOperandRgb0TevStage1879 void SetOperandRgb0(TevOpRgb value)
1880 {
1881 NW_ASSERT(value < TEVOPRGB_MAX);
1882 bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB0, BITS_OPERANDRGB, u32(value));
1883 }
1884
1885 //! @brief RGB演算のソース 1 のオペランドを設定します。
1886 //!
1887 //! @param value 設定する値です。
1888 //!
1889 //! @since 2009/09/18 初版。
1890 //!
SetOperandRgb1TevStage1891 void SetOperandRgb1(TevOpRgb value)
1892 {
1893 NW_ASSERT(value < TEVOPRGB_MAX);
1894 bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB1, BITS_OPERANDRGB, u32(value));
1895 }
1896
1897 //! @brief RGB演算のソース 2 のオペランドを設定します。
1898 //!
1899 //! @param value 設定する値です。
1900 //!
1901 //! @since 2009/09/18 初版。
1902 //!
SetOperandRgb2TevStage1903 void SetOperandRgb2(TevOpRgb value)
1904 {
1905 NW_ASSERT(value < TEVOPRGB_MAX);
1906 bits0 = internal::SetBits(u32(bits0), POS0_OPERANDRGB2, BITS_OPERANDRGB, u32(value));
1907 }
1908
1909 //! @brief アルファ演算のソース 0 のオペランドを設定します。
1910 //!
1911 //! @param value 設定する値です。
1912 //!
1913 //! @since 2009/09/18 初版。
1914 //!
SetOperandAlpha0TevStage1915 void SetOperandAlpha0(TevOpAlp value)
1916 {
1917 NW_ASSERT(value < TEVOPALP_MAX);
1918 bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA0, BITS_OPERANDALPHA, u32(value));
1919 }
1920
1921 //! @brief アルファ演算のソース 1 のオペランドを設定します。
1922 //!
1923 //! @param value 設定する値です。
1924 //!
1925 //! @since 2009/09/18 初版。
1926 //!
SetOperandAlpha1TevStage1927 void SetOperandAlpha1(TevOpAlp value)
1928 {
1929 NW_ASSERT(value < TEVOPALP_MAX);
1930 bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA1, BITS_OPERANDALPHA, u32(value));
1931 }
1932
1933 //! @brief アルファ演算のソース 2 のオペランドを設定します。
1934 //!
1935 //! @param value 設定する値です。
1936 //!
1937 //! @since 2009/09/18 初版。
1938 //!
SetOperandAlpha2TevStage1939 void SetOperandAlpha2(TevOpAlp value)
1940 {
1941 NW_ASSERT(value < TEVOPALP_MAX);
1942 bits1 = internal::SetBits(u32(bits1), POS1_OPERANDALPHA2, BITS_OPERANDALPHA, u32(value));
1943 }
1944
1945 //! @brief RGB演算に対するスケールを設定します。
1946 //!
1947 //! @param value 設定する値です。
1948 //!
1949 //! @since 2009/09/18 初版。
1950 //!
SetScaleRgbTevStage1951 void SetScaleRgb(TevScale value)
1952 {
1953 NW_ASSERT(value < TEVSCALE_MAX);
1954 bits0 = internal::SetBits(u32(bits0), POS0_SCALERGB, BITS_SCALE, u32(value));
1955 }
1956
1957 //! @brief アルファ演算に対するスケールを設定します。
1958 //!
1959 //! @param value 設定する値です。
1960 //!
1961 //! @since 2009/09/18 初版。
1962 //!
SetScaleAlphaTevStage1963 void SetScaleAlpha(TevScale value)
1964 {
1965 NW_ASSERT(value < TEVSCALE_MAX);
1966 bits1 = internal::SetBits(u32(bits1), POS1_SCALEALPHA, BITS_SCALE, u32(value));
1967 }
1968
1969 //! @brief RGB演算で使用する定数レジスタのソースを設定します。
1970 //!
1971 //! @param value 設定する値です。
1972 //!
1973 //! @since 2009/09/18 初版。
1974 //!
SetKonstSelRgbTevStage1975 void SetKonstSelRgb(TevKonstSel value)
1976 {
1977 NW_ASSERT(value < TEVKONSTSEL_MAX);
1978 bits2 = internal::SetBits(u32(bits2), POS2_KONSTSELRGB, BITS_KONSTSEL, u32(value));
1979 }
1980
1981 //! @brief アルファ演算で使用する定数レジスタのソースを設定します。
1982 //!
1983 //! @param value 設定する値です。
1984 //!
1985 //! @since 2009/09/18 初版。
1986 //!
SetKonstSelAlphaTevStage1987 void SetKonstSelAlpha(TevKonstSel value)
1988 {
1989 NW_ASSERT(value < TEVKONSTSEL_MAX);
1990 bits2 = internal::SetBits(u32(bits2), POS2_KONSTSELALPHA, BITS_KONSTSEL, u32(value));
1991 }
1992
1993 //! @brief 前段の演算結果(RGB)をバッファに保存するか設定します。
1994 //!
1995 //! @param value 設定する値です。
1996 //!
1997 //! @since 2009/09/18 初版。
1998 //!
SetSavePrevRgbTevStage1999 void SetSavePrevRgb(bool value)
2000 {
2001 bits0 = internal::SetBit(u32(bits0), POS0_SAVEPREVRGB, value);
2002 }
2003
2004 //! @brief 前段の演算結果(A)をバッファに保存するか設定します。
2005 //!
2006 //! @param value 設定する値です。
2007 //!
2008 //! @since 2009/09/18 初版。
2009 //!
SetSavePrevAlphaTevStage2010 void SetSavePrevAlpha(bool value)
2011 {
2012 bits1 = internal::SetBit(u32(bits1), POS1_SAVEPREVALPHA, value);
2013 }
2014
2015 //! @brief RGBの演算のタイプを取得します。
2016 //!
2017 //! @return 現在の設定値を返します。
2018 //!
2019 //! @since 2009/09/18 初版。
2020 //!
GetCombineRgbTevStage2021 TevMode GetCombineRgb() const
2022 {
2023 return TevMode(internal::GetBits(u32(bits0), POS0_COMBINERGB, BITS_COMBINERGB));
2024 }
2025
2026 //! @brief アルファの演算のタイプを取得します。
2027 //!
2028 //! @return 現在の設定値を返します。
2029 //!
2030 //! @since 2009/09/18 初版。
2031 //!
GetCombineAlphaTevStage2032 TevMode GetCombineAlpha() const
2033 {
2034 return TevMode(internal::GetBits(u32(bits1), POS1_COMBINEALPHA, BITS_COMBINEALPHA));
2035 }
2036
2037 //! @brief RGB演算の入力 0 のソースを取得します。
2038 //!
2039 //! @return 現在の設定値を返します。
2040 //!
2041 //! @since 2009/09/18 初版。
2042 //!
GetSrcRgb0TevStage2043 TevSrc GetSrcRgb0() const
2044 {
2045 return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB0, BITS_SRCRGB));
2046 }
2047
2048 //! @brief RGB演算の入力 1 のソースを取得します。
2049 //!
2050 //! @return 現在の設定値を返します。
2051 //!
2052 //! @since 2009/09/18 初版。
2053 //!
GetSrcRgb1TevStage2054 TevSrc GetSrcRgb1() const
2055 {
2056 return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB1, BITS_SRCRGB));
2057 }
2058
2059 //! @brief RGB演算の入力 2 のソースを取得します。
2060 //!
2061 //! @return 現在の設定値を返します。
2062 //!
2063 //! @since 2009/09/18 初版。
2064 //!
GetSrcRgb2TevStage2065 TevSrc GetSrcRgb2() const
2066 {
2067 return TevSrc(internal::GetBits(u32(bits0), POS0_SRCRGB2, BITS_SRCRGB));
2068 }
2069
2070 //! @brief アルファ演算の入力 0 のソースを取得します。
2071 //!
2072 //! @return 現在の設定値を返します。
2073 //!
2074 //! @since 2009/09/18 初版。
2075 //!
GetSrcAlpha0TevStage2076 TevSrc GetSrcAlpha0() const
2077 {
2078 return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA0, BITS_SRCALPHA));
2079 }
2080
2081 //! @brief アルファ演算の入力 1 のソースを取得します。
2082 //!
2083 //! @return 現在の設定値を返します。
2084 //!
2085 //! @since 2009/09/18 初版。
2086 //!
GetSrcAlpha1TevStage2087 TevSrc GetSrcAlpha1() const
2088 {
2089 return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA1, BITS_SRCALPHA));
2090 }
2091
2092 //! @brief アルファ演算の入力 2 のソースを取得します。
2093 //!
2094 //! @return 現在の設定値を返します。
2095 //!
2096 //! @since 2009/09/18 初版。
2097 //!
GetSrcAlpha2TevStage2098 TevSrc GetSrcAlpha2() const
2099 {
2100 return TevSrc(internal::GetBits(u32(bits1), POS1_SRCALPHA2, BITS_SRCALPHA));
2101 }
2102
2103 //! @brief RGB演算の入力 0 のオペランドを取得します。
2104 //!
2105 //! @return 現在の設定値を返します。
2106 //!
2107 //! @since 2009/09/18 初版。
2108 //!
GetOperandRgb0TevStage2109 TevOpRgb GetOperandRgb0() const
2110 {
2111 return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB0, BITS_OPERANDRGB));
2112 }
2113
2114 //! @brief RGB演算の入力 1 のオペランドを取得します。
2115 //!
2116 //! @return 現在の設定値を返します。
2117 //!
2118 //! @since 2009/09/18 初版。
2119 //!
GetOperandRgb1TevStage2120 TevOpRgb GetOperandRgb1() const
2121 {
2122 return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB1, BITS_OPERANDRGB));
2123 }
2124
2125 //! @brief RGB演算の入力 2 のオペランドを取得します。
2126 //!
2127 //! @return 現在の設定値を返します。
2128 //!
2129 //! @since 2009/09/18 初版。
2130 //!
GetOperandRgb2TevStage2131 TevOpRgb GetOperandRgb2() const
2132 {
2133 return TevOpRgb(internal::GetBits(u32(bits0), POS0_OPERANDRGB2, BITS_OPERANDRGB));
2134 }
2135
2136 //! @brief アルファ演算の入力 0 のオペランドを取得します。
2137 //!
2138 //! @return 現在の設定値を返します。
2139 //!
2140 //! @since 2009/09/18 初版。
2141 //!
GetOperandAlpha0TevStage2142 TevOpAlp GetOperandAlpha0() const
2143 {
2144 return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA0, BITS_OPERANDALPHA));
2145 }
2146
2147 //! @brief アルファ演算の入力 1 のオペランドを取得します。
2148 //!
2149 //! @return 現在の設定値を返します。
2150 //!
2151 //! @since 2009/09/18 初版。
2152 //!
GetOperandAlpha1TevStage2153 TevOpAlp GetOperandAlpha1() const
2154 {
2155 return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA1, BITS_OPERANDALPHA));
2156 }
2157
2158 //! @brief アルファ演算の入力 2 のオペランドを取得します。
2159 //!
2160 //! @return 現在の設定値を返します。
2161 //!
2162 //! @since 2009/09/18 初版。
2163 //!
GetOperandAlpha2TevStage2164 TevOpAlp GetOperandAlpha2() const
2165 {
2166 return TevOpAlp(internal::GetBits(u32(bits1), POS1_OPERANDALPHA2, BITS_OPERANDALPHA));
2167 }
2168
2169 //! @brief RGB演算に対するスケールを取得します。
2170 //!
2171 //! @return 現在の設定値を返します。
2172 //!
2173 //! @since 2009/09/18 初版。
2174 //!
GetScaleRgbTevStage2175 TevScale GetScaleRgb() const
2176 {
2177 return TevScale(internal::GetBits(u32(bits0), POS0_SCALERGB, BITS_SCALE));
2178 }
2179
2180 //! @brief アルファ演算に対するスケールを取得します。
2181 //!
2182 //! @return 現在の設定値を返します。
2183 //!
2184 //! @since 2009/09/18 初版。
2185 //!
GetScaleAlphaTevStage2186 TevScale GetScaleAlpha() const
2187 {
2188 return TevScale(internal::GetBits(u32(bits1), POS1_SCALEALPHA, BITS_SCALE));
2189 }
2190
2191 //! @brief RGB演算で使用する定数レジスタのソースを取得します。
2192 //!
2193 //! @return 現在の設定値を返します。
2194 //!
2195 //! @since 2009/09/18 初版。
2196 //!
GetKonstSelRgbTevStage2197 TevKonstSel GetKonstSelRgb() const
2198 {
2199 return TevKonstSel(internal::GetBits(u32(bits2), POS2_KONSTSELRGB, BITS_KONSTSEL));
2200 }
2201
2202 //! @brief アルファ演算で使用する定数レジスタのソースを取得します。
2203 //!
2204 //! @return 現在の設定値を返します。
2205 //!
2206 //! @since 2009/09/18 初版。
2207 //!
GetKonstSelAlphaTevStage2208 TevKonstSel GetKonstSelAlpha() const
2209 {
2210 return TevKonstSel(internal::GetBits(u32(bits2), POS2_KONSTSELALPHA, BITS_KONSTSEL));
2211 }
2212
2213 //! @brief 前段の演算結果(RGB)をバッファに保存するかの設定を取得します。
2214 //!
2215 //! @return 現在の設定値を返します。
2216 //!
2217 //! @since 2009/09/18 初版。
2218 //!
GetSavePrevRgbTevStage2219 bool GetSavePrevRgb() const
2220 {
2221 return internal::TestBit(u32(bits0), POS0_SAVEPREVRGB);
2222 }
2223
2224
2225 //! @brief 前段の演算結果(A)をバッファに保存するかの設定を取得します。
2226 //!
2227 //! @return 現在の設定値を返します。
2228 //!
2229 //! @since 2009/09/18 初版。
2230 //!
GetSavePrevAlphaTevStage2231 bool GetSavePrevAlpha() const
2232 {
2233 return internal::TestBit(u32(bits1), POS1_SAVEPREVALPHA);
2234 }
2235
2236 //@}
2237
2238 protected:
2239 //! @details :private
2240 ut::ResU32 bits0;
2241
2242 //! @details :private
2243 ut::ResU32 bits1;
2244
2245 //! @details :private
2246 ut::ResU32 bits2;
2247
2248 //! @details :private
2249 enum Bits
2250 {
2251 BITS_COMBINERGB = 4,
2252 BITS_COMBINEALPHA = 4,
2253 BITS_SRCRGB = 4,
2254 BITS_SRCALPHA = 4,
2255 BITS_OPERANDRGB = 4,
2256 BITS_OPERANDALPHA = 4, // at least 3
2257 BITS_SCALE = 2,
2258 BITS_KONSTSEL = 4,
2259 BITS_SAVEPREV = 1
2260 };
2261
2262 //! @details :private
2263 enum Pos0
2264 {
2265 POS0_SRCRGB0 = 0,
2266 POS0_SRCRGB1 = 4,
2267 POS0_SRCRGB2 = 8,
2268 POS0_OPERANDRGB0 = 12,
2269 POS0_OPERANDRGB1 = 16,
2270 POS0_OPERANDRGB2 = 20,
2271 POS0_COMBINERGB = 24,
2272 POS0_SCALERGB = 28,
2273 POS0_SAVEPREVRGB = 30,
2274
2275 FIELD0_SIZE = 31
2276 };
2277
2278 //! @details :private
2279 enum Pos1
2280 {
2281 POS1_SRCALPHA0 = 0,
2282 POS1_SRCALPHA1 = 4,
2283 POS1_SRCALPHA2 = 8,
2284 POS1_OPERANDALPHA0 = 12,
2285 POS1_OPERANDALPHA1 = 16,
2286 POS1_OPERANDALPHA2 = 20,
2287 POS1_COMBINEALPHA = 24,
2288 POS1_SCALEALPHA = 28,
2289 POS1_SAVEPREVALPHA = 30,
2290
2291 FIELD1_SIZE = 31
2292 };
2293
2294 //! @details :private
2295 enum Pos2
2296 {
2297 POS2_KONSTSELRGB = 0,
2298 POS2_KONSTSELALPHA = 4,
2299
2300 FIELD2_SIZE = 8
2301 };
2302
2303 //! @details :private
2304 static void CompileCheck();
2305 };
2306
2307 //---------------------------------------------------------------------------
2308 //! :category 描画
2309 //!
2310 //! @brief アルファコンペアの設定を持つ構造体です。
2311 //!
2312 //! @since 2009/09/18 初版。
2313 //---------------------------------------------------------------------------
2314 struct AlphaCompare
2315 {
2316 //----------------------------------------
2317 //! @name コンストラクタ/デストラクタ
2318 //@{
2319
2320 //! @brief コンストラクタです。
2321 //!
2322 //! @details
2323 //! 常に通過する設定で初期化します。
2324 //!
2325 //! @since 2009/09/18 初版。
2326 //!
AlphaCompareAlphaCompare2327 AlphaCompare()
2328 {
2329 Set(ALPHATEST_ALWAYS, 0.f);
2330 }
2331
2332 //! @brief コンストラクタです。
2333 //!
2334 //! @details
2335 //! 指定の設定で初期化します。
2336 //!
2337 //! @param aFunc 比較の条件です。
2338 //! @param aRef 比較の対象値です。
2339 //!
2340 //! @since 2009/09/18 初版。
2341 //!
AlphaCompareAlphaCompare2342 AlphaCompare(
2343 AlphaTest aFunc,
2344 f32 aRef
2345 )
2346 {
2347 Set(aFunc, aRef);
2348 }
2349
2350 //@}
2351
2352 //----------------------------------------
2353 //! @name 設定/取得
2354 //@{
2355
2356 //! @brief 設定を変更します
2357 //!
2358 //! @param aFunc 比較の条件です。
2359 //! @param aRef 比較の対象値です。
2360 //!
2361 //! @since 2009/09/18 初版。
2362 //!
SetAlphaCompare2363 void Set(
2364 AlphaTest aFunc,
2365 f32 aRef
2366 )
2367 {
2368 NW_ASSERT(0 <= aFunc && aFunc < ALPHATEST_MAX);
2369
2370 func = u8(aFunc);
2371 ref = aRef;
2372 }
2373
2374 //! @brief アルファ比較の条件を取得します。
2375 //!
2376 //! @return 設定値を返します。
2377 //!
2378 //! @since 2009/09/18 初版。
2379 //!
GetFuncAlphaCompare2380 AlphaTest GetFunc() const
2381 {
2382 return AlphaTest(func);
2383 }
2384
2385 //! @brief アルファ比較の対象の値を取得します。
2386 //!
2387 //! @return 設定値を返します。
2388 //!
2389 //! @since 2009/09/18 初版。
2390 //!
GetRefAlphaCompare2391 f32 GetRef() const
2392 {
2393 return ref;
2394 }
2395
2396 //@}
2397
2398 protected:
2399 //! @details :private
2400 u8 func;
2401
2402 //! @details :private
2403 ut::ResF32 ref;
2404 };
2405
2406 //---------------------------------------------------------------------------
2407 //! :category 描画
2408 //!
2409 //! @brief ブレンドモードの設定を持つ構造体です。
2410 //!
2411 //! @since 2009/09/18 初版。
2412 //---------------------------------------------------------------------------
2413 struct BlendMode
2414 {
2415 //----------------------------------------
2416 //! @name コンストラクタ/デストラクタ
2417 //@{
2418
2419 //! @brief コンストラクタです。
2420 //!
2421 //! @details
2422 //! ブレンドを行わない(上書き)で初期化します。
2423 //!
2424 //! @since 2009/09/18 初版。
2425 //!
BlendModeBlendMode2426 BlendMode()
2427 {
2428 Set(
2429 BLENDOP_DISABLE,
2430 BLENDFACTORSRC_SRC_ALPHA,
2431 BLENDFACTORDST_INV_SRC_ALPHA,
2432 LOGICOP_DISABLE);
2433 }
2434
2435 //! @brief コンストラクタです。
2436 //!
2437 //! @details
2438 //! 指定の設定で初期化します。
2439 //!
2440 //! @param aBlendOp ブレンド演算のタイプを指定します。
2441 //! @param aSrcFactor ピクセルカラーに乗算する値を指定します。
2442 //! @param aDstFactor フレームバッファカラーに乗算する値を指定します。
2443 //! @param aLogicOp 論理演算のタイプを指定します。
2444 //!
2445 //! @since 2009/09/18 初版。
2446 //!
BlendModeBlendMode2447 BlendMode(
2448 BlendOp aBlendOp,
2449 BlendFactorSrc aSrcFactor,
2450 BlendFactorDst aDstFactor,
2451 LogicOp aLogicOp
2452 )
2453 {
2454 Set(aBlendOp, aSrcFactor, aDstFactor, aLogicOp);
2455 }
2456
2457 //@}
2458
2459 //----------------------------------------
2460 //! @name 設定/取得
2461 //@{
2462
2463 //! @brief 設定を変更します。
2464 //!
2465 //! @param aBlendOp ブレンド演算のタイプを指定します。
2466 //! @param aSrcFactor ピクセルカラーに乗算する値を指定します。
2467 //! @param aDstFactor フレームバッファカラーに乗算する値を指定します。
2468 //! @param aLogicOp 論理演算のタイプを指定します。
2469 //!
2470 //! @since 2009/09/18 初版。
2471 //!
SetBlendMode2472 void Set(
2473 BlendOp aBlendOp,
2474 BlendFactorSrc aSrcFactor,
2475 BlendFactorDst aDstFactor,
2476 LogicOp aLogicOp
2477 )
2478 {
2479 blendOp = u8(aBlendOp);
2480 srcFactor = u8(aSrcFactor);
2481 dstFactor = u8(aDstFactor);
2482 logicOp = u8(aLogicOp);
2483 }
2484
2485 //! @brief ブレンド演算のタイプを取得します。
2486 //!
2487 //! @return 現在の設定値を返します。
2488 //!
2489 //! @since 2009/09/18 初版。
2490 //!
GetBlendOpBlendMode2491 BlendOp GetBlendOp() const
2492 {
2493 return BlendOp(blendOp);
2494 }
2495
2496 //! @brief ピクセルカラーに乗算する値を取得します。
2497 //!
2498 //! @return 現在の設定値を返します。
2499 //!
2500 //! @since 2009/09/18 初版。
2501 //!
GetSrcFactorBlendMode2502 BlendFactorSrc GetSrcFactor() const
2503 {
2504 return BlendFactorSrc(srcFactor);
2505 }
2506
2507 //! @brief フレームバッファカラーに乗算する値を取得します。
2508 //!
2509 //! @return 現在の設定値を返します。
2510 //!
2511 //! @since 2009/09/18 初版。
2512 //!
GetDstFactorBlendMode2513 BlendFactorDst GetDstFactor() const
2514 {
2515 return BlendFactorDst(dstFactor);
2516 }
2517
2518 //! @brief 論理演算のタイプを取得します。
2519 //!
2520 //! @return 現在の設定値を返します。
2521 //!
2522 //! @since 2009/09/18 初版。
2523 //!
GetLogicOpBlendMode2524 LogicOp GetLogicOp() const
2525 {
2526 return LogicOp(logicOp);
2527 }
2528
2529 //@}
2530
2531 protected:
2532 //! @details :private
2533 ut::ResU8 blendOp;
2534
2535 //! @details :private
2536 ut::ResU8 srcFactor;
2537
2538 //! @details :private
2539 ut::ResU8 dstFactor;
2540
2541 //! @details :private
2542 ut::ResU8 logicOp;
2543 };
2544
2545 //---------------------------------------------------------------------------
2546 //! :category 描画
2547 //!
2548 //! @brief ペインの各辺の拡大量を持つ構造体です。
2549 //!
2550 //! @since 2009/09/18 初版。
2551 //---------------------------------------------------------------------------
2552 struct InflationLRTB
2553 {
2554 ut::ResF32 l; //!< 左辺の拡大量です。
2555 ut::ResF32 r; //!< 右辺の拡大量です。
2556 ut::ResF32 t; //!< 上辺の拡大量です。
2557 ut::ResF32 b; //!< 下辺の拡大量です。
2558 };
2559
2560 //---------------------------------------------------------------------------
2561 //! :category 描画
2562 //!
2563 //! @brief ウィンドウペインのフレーム(枠)のサイズを持つ構造体です。
2564 //!
2565 //! @since 2009/09/18 初版。
2566 //---------------------------------------------------------------------------
2567 struct WindowFrameSize
2568 {
2569 ut::ResF32 l; //!< 左辺の枠の幅です。
2570 ut::ResF32 r; //!< 右辺の枠の幅です。
2571 ut::ResF32 t; //!< 上辺の枠の高さです。
2572 ut::ResF32 b; //!< 下辺の枠の高さです。
2573 };
2574
2575 //---------------------------------------------------------------------------
2576 //! :category リソースアクセサ
2577 //!
2578 //! @brief 拡張ユーザデータクラスです。
2579 //!
2580 //! @details
2581 //! 名前文字列とデータがオブジェクトに続いて格納されます。
2582 //!
2583 //! @sa Pane
2584 //! @sa res::ExtUserDataList
2585 //!
2586 //! @since 2009/09/18 初版。
2587 //---------------------------------------------------------------------------
2588 class ExtUserData
2589 {
2590 public:
2591 //----------------------------------------
2592 //! @name コンストラクタ/デストラクタ
2593 //@{
2594
2595 //! @brief コンストラクタです。
2596 //!
2597 //! @param nameStrOffset 拡張ユーザデータの名前へのオフセットです(オブジェクト先頭から)。
2598 //! @param dataOffset 拡張ユーザデータへのオフセットです(オブジェクト先頭から)。
2599 //! @param num 拡張ユーザデータの個数です。
2600 //! @param type 拡張ユーザデータのデータタイプです。
2601 //!
2602 //! @since 2009/09/18 初版。
2603 //!
ExtUserData(u32 nameStrOffset,u32 dataOffset,u16 num,u8 type)2604 ExtUserData(u32 nameStrOffset, u32 dataOffset, u16 num, u8 type)
2605 : m_NameStrOffset(nameStrOffset),
2606 m_DataOffset(dataOffset),
2607 m_Num(num),
2608 m_Type(type),
2609 m_Padding(0)
2610 {}
2611
2612 //@}
2613
2614 //----------------------------------------
2615 //! @name 設定/取得
2616 //@{
2617
2618 //! @brief 拡張ユーザデータの名前を取得します。
2619 //!
2620 //! @return 拡張ユーザデータに設定されている名前を返します。
2621 //!
2622 //! @since 2009/09/18 初版。
2623 //!
GetName()2624 const char* GetName() const
2625 {
2626 return m_NameStrOffset ? internal::ConvertOffsToPtr<const char>(this, m_NameStrOffset): 0;
2627 }
2628
2629 //! @brief 拡張ユーザデータの型を取得します。
2630 //!
2631 //! @details
2632 //! 文字列、整数配列、浮動小数点数配列のいずれかになります。
2633 //!
2634 //! @return データタイプを返します。
2635 //!
2636 //! @since 2009/09/18 初版。
2637 //!
GetType()2638 ExtUserDataType GetType() const
2639 {
2640 return ExtUserDataType(m_Type);
2641 }
2642
2643 //! @brief 拡張ユーザデータの個数を取得します。
2644 //!
2645 //! @details
2646 //! データのタイプが文字列の場合は、文字列の長さになります。
2647 //!
2648 //! データのタイプが整数配列の場合は、配列の要素数になります。
2649 //!
2650 //! データのタイプが浮動小数点数配列の場合は、配列の要素数になります。
2651 //!
2652 //! @return データの個数を返します。
2653 //!
2654 //! @since 2009/09/18 初版。
2655 //!
GetNum()2656 u16 GetNum() const
2657 {
2658 return m_Num;
2659 }
2660
2661 //! @brief 拡張ユーザデータを文字列として取得します。
2662 //!
2663 //! @details
2664 //! データのタイプが文字列である場合に有効です。
2665 //!
2666 //! @return 文字列のポインタを返します。
2667 //!
2668 //! @since 2009/09/18 初版。
2669 //!
GetString()2670 const char* GetString() const
2671 {
2672 NW_ASSERT(GetType() == EXTUSERDATATYPE_STRING);
2673 return internal::ConvertOffsToPtr<const char>(this, m_DataOffset);
2674 }
2675
2676 //! @brief 拡張ユーザデータを整数配列として取得します。
2677 //!
2678 //! @details
2679 //! データのタイプが整数配列である場合に有効です。
2680 //!
2681 //! @return ResS32配列の先頭要素のポインタを返します。
2682 //!
2683 //! @since 2009/09/18 初版。
2684 //!
GetIntArray()2685 const ut::ResS32* GetIntArray() const
2686 {
2687 NW_ASSERT(GetType() == EXTUSERDATATYPE_INT);
2688 return internal::ConvertOffsToPtr<const ut::ResS32>(this, m_DataOffset);
2689 }
2690
2691 //! @brief 拡張ユーザデータを浮動小数点数配列として取得します。
2692 //!
2693 //! @details
2694 //! データのタイプが浮動小数点配列である場合に有効です。
2695 //!
2696 //! @return ResF32配列の先頭要素のポインタを返します。
2697 //!
2698 //! @since 2009/09/18 初版。
2699 //!
GetFloatArray()2700 const ut::ResF32* GetFloatArray() const
2701 {
2702 NW_ASSERT(GetType() == EXTUSERDATATYPE_FLOAT);
2703 return internal::ConvertOffsToPtr<const ut::ResF32>(this, m_DataOffset);
2704 }
2705
2706 //@}
2707
2708 protected:
2709 //! @details :private
2710 //! データ名のオブジェクトの先頭を基準にしたオフセットです。
2711 ut::ResU32 m_NameStrOffset;
2712
2713 //! @details :private
2714 //! データのオブジェクトの先頭を基準にしたオフセットです。
2715 ut::ResU32 m_DataOffset;
2716
2717 //! @details :private
2718 ut::ResU16 m_Num;
2719
2720 //! @details :private
2721 ut::ResU8 m_Type;
2722
2723 //! @details :private
2724 ut::ResU8 m_Padding;
2725 };
2726
2727 //---------------------------------------------------------------------------
2728 //! :category アニメーション
2729 //!
2730 //! @brief アニメーション区間タグで指定されるグループの情報です。
2731 //!
2732 //! @since 2009/09/18 初版。
2733 //---------------------------------------------------------------------------
2734 struct AnimationGroupRef
2735 {
2736 //----------------------------------------
2737 //! @name コンストラクタ/デストラクタ
2738 //@{
2739
2740 //! @brief コンストラクタです。
2741 //!
2742 //! @since 2009/09/18 初版。
2743 //!
AnimationGroupRefAnimationGroupRef2744 AnimationGroupRef()
2745 : flag(0)
2746 {
2747 std::memset(name, 0, sizeof(name));
2748 std::memset(padding, 0, sizeof(padding));
2749 }
2750
2751 //@}
2752
2753 //----------------------------------------
2754 //! @name 設定/取得
2755 //@{
2756
2757 //! @brief グループ名を取得します。
2758 //!
2759 //! @return グループ名を返します。
2760 //!
2761 //! @since 2009/09/18 初版。
2762 //!
GetNameAnimationGroupRef2763 const char* GetName() const
2764 {
2765 return name;
2766 }
2767
2768 //@}
2769
2770 //! グループ名です。
2771 char name[ResourceNameStrMax + 1];
2772 //! フラグです。
2773 ut::ResU8 flag;
2774 //! (未使用です)
2775 ut::ResU8 padding[2];
2776 };
2777
2778 //---------------------------------------------------------------------------
2779 //! :category アニメーション
2780 //!
2781 //! @brief アニメーション共有情報です。
2782 //!
2783 //! @since 2009/09/18 初版。
2784 //---------------------------------------------------------------------------
2785 struct AnimationShareInfo
2786 {
2787 //----------------------------------------
2788 //! @name コンストラクタ/デストラクタ
2789 //@{
2790
2791 //! @brief コンストラクタです。
2792 //!
2793 //! @since 2009/09/18 初版。
2794 //!
AnimationShareInfoAnimationShareInfo2795 AnimationShareInfo()
2796 {
2797 std::memset(srcPaneName, 0, sizeof(srcPaneName));
2798 std::memset(targetGroupName, 0, sizeof(targetGroupName));
2799 std::memset(padding, 0, sizeof(padding));
2800 }
2801
2802 //@}
2803
2804 //----------------------------------------
2805 //! @name 設定/取得
2806 //@{
2807
2808 //! @brief アニメーションの共有元となるペインの名前を取得します。
2809 //!
2810 //! @return ペインの名前を返します。
2811 //!
2812 //! @since 2009/09/18 初版。
2813 //!
GetSrcPaneNameAnimationShareInfo2814 const char* GetSrcPaneName() const
2815 {
2816 return srcPaneName;
2817 }
2818
2819 //! @brief アニメーションの共有対象となるペインが登録されているグループの名前を取得します。
2820 //!
2821 //! @return グループの名前を返します。
2822 //!
2823 //! @since 2009/09/18 初版。
2824 //!
GetTargetGroupNameAnimationShareInfo2825 const char* GetTargetGroupName() const
2826 {
2827 return targetGroupName;
2828 }
2829
2830 //@}
2831
2832 //! アニメーションの共有元となるペインの名前です。
2833 char srcPaneName[ResourceNameStrMax + 1];
2834 //! アニメーションの共有対象となるペインが登録されているグループの名前です。
2835 char targetGroupName[ResourceNameStrMax + 1];
2836 //! (未使用です)
2837 ut::ResU8 padding[2];
2838 };
2839
2840 class AnimTransform;
2841
2842 //---------------------------------------------------------------------------
2843 //! :category アニメーション
2844 //!
2845 //! @brief アニメーションにインデックスを付加したアニメーションリンク情報です。
2846 //!
2847 //! @since 2009/09/18 初版。
2848 //---------------------------------------------------------------------------
2849 class AnimationLink
2850 {
2851 public:
2852 //----------------------------------------
2853 //! @name コンストラクタ/デストラクタ
2854 //@{
2855
2856 //! @brief コンストラクタです。
2857 //!
2858 //! @details
2859 //! 作成時はアニメーションと結びつけられていません。
2860 //!
2861 //! @since 2009/09/18 初版。
2862 //!
AnimationLink()2863 AnimationLink()
2864 {
2865 Reset();
2866 }
2867
2868 //!@}
2869
2870 //----------------------------------------
2871 //! @name 取得/設定
2872 //@{
2873
2874 //! @brief アニメーションの設定を解除します。
2875 //!
2876 //! @since 2009/09/18 初版。
2877 //!
Reset()2878 void Reset()
2879 {
2880 Set(0, 0, false);
2881 }
2882
2883 //! @brief アニメーションの全ての設定を行います。
2884 //!
2885 //! @param animTrans アニメーションへのポインタです。
2886 //! @param idx インデックスです。
2887 //! @param bDisable アニメーションを無効状態で関連付ける場合は true を指定します。
2888 //!
2889 //! @since 2009/09/18 初版。
2890 //!
Set(AnimTransform * animTrans,u16 idx,bool bDisable)2891 void Set(
2892 AnimTransform* animTrans,
2893 u16 idx,
2894 bool bDisable
2895 )
2896 {
2897 m_AnimTrans = animTrans;
2898 m_Idx = idx;
2899 m_Disable = bDisable;
2900 }
2901
2902 //! @brief アニメーションとインデックスを設定します。
2903 //!
2904 //! @details
2905 //! アニメーションの有効/無効状態は変更しません。
2906 //!
2907 //! @param animTrans アニメーションへのポインタです。
2908 //! @param idx インデックスです。
2909 //!
2910 //! @since 2009/09/18 初版。
2911 //!
SetAnimTransform(AnimTransform * animTrans,u16 idx)2912 void SetAnimTransform(
2913 AnimTransform* animTrans,
2914 u16 idx
2915 )
2916 {
2917 m_AnimTrans = animTrans;
2918 m_Idx = idx;
2919 }
2920
2921 //! @brief アニメーションを取得します。
2922 //!
2923 //! @return アニメーションへのポインタを返します。
2924 //!
2925 //! @since 2009/09/18 初版。
2926 //!
GetAnimTransform()2927 AnimTransform* GetAnimTransform() const
2928 {
2929 return m_AnimTrans;
2930 }
2931
2932 //! @brief インデックスを取得します。
2933 //!
2934 //! @return インデックスを返します。
2935 //!
2936 //! @since 2009/09/18 初版。
2937 //!
GetIndex()2938 u16 GetIndex() const
2939 {
2940 return m_Idx;
2941 }
2942
2943 //@}
2944
2945 //----------------------------------------
2946 //! @name 有効/無効
2947 //@{
2948
2949 //! @brief このアニメーションリンク情報が有効かどうかを判定します。
2950 //!
2951 //! @return 有効であれば true を、無効であれば false を返します。
2952 //!
2953 //! @sa SetEnable
2954 //!
2955 //! @since 2009/09/18 初版。
2956 //!
IsEnable()2957 bool IsEnable() const
2958 {
2959 return ! m_Disable;
2960 }
2961
2962 //! @brief このアニメーションリンク情報を有効または無効にします。
2963 //!
2964 //! @param bEnable 有効にする場合は true を指定します。
2965 //!
2966 //! @sa IsEnable
2967 //!
2968 //! @since 2009/09/18 初版。
2969 //!
SetEnable(bool bEnable)2970 void SetEnable(bool bEnable)
2971 {
2972 m_Disable = ! bEnable;
2973 }
2974
2975 //@}
2976
2977 //! :private
2978 //! @brief リンク情報です。
2979 ut::LinkListNode m_Link;
2980
2981 protected:
2982 //! @details :private
2983 AnimTransform* m_AnimTrans;
2984
2985 //! @details :private
2986 u16 m_Idx;
2987
2988 //! @details :private
2989 bool m_Disable;
2990 };
2991
2992 //! @name アニメーション
2993 //@{
2994
2995 //! @brief アニメーションリンク情報の一覧を保持するリストの定義です。
2996 //!
2997 //! @since 2009/09/18 初版。
2998 //!
2999 typedef ut::LinkList<AnimationLink, offsetof(AnimationLink, m_Link)> AnimationList;
3000
3001 //@}
3002
3003
3004 //---------------------------------------------------------------------------
3005 //! :category リソースアクセサ
3006 //!
3007 //! @brief テクスチャ情報を保持するクラスです。
3008 //!
3009 //! @sa ResourceAccessor
3010 //!
3011 //! @since 2009/09/18 初版。
3012 //---------------------------------------------------------------------------
3013 class TextureInfo
3014 {
3015 public:
3016 //! 無効なテクスチャを表します。
3017 static const u32 INVALID = 0;
3018
3019 //----------------------------------------
3020 //! @name コンストラクタ/デストラクタ
3021 //@{
3022
3023 //! @brief コンストラクタです。
3024 //!
3025 //! @details
3026 //! 無効なテクスチャオブジェクトへのハンドル (0) とサイズ (0, 0) で初期化します。
3027 //!
3028 //! @since 2009/09/18 初版。
3029 //!
TextureInfo()3030 TextureInfo()
3031 : m_TexObject(INVALID)
3032 , m_PhysicalAddress(NULL)
3033 {
3034 }
3035
3036 //! @brief コピーコンストラクタです。
3037 //!
3038 //! @param src コピー元です。
3039 //!
3040 //! @since 2009/09/18 初版。
3041 //!
TextureInfo(const TextureInfo & src)3042 TextureInfo(const TextureInfo& src)
3043 {
3044 this->Set(src);
3045 }
3046
3047 //! @brief コンストラクタです。
3048 //!
3049 //! @details
3050 //! テクスチャイメージの一部を利用する場合に使用します。
3051 //! realSize の幅と高さは2のべき乗でなければなりません。
3052 //!
3053 //! テクスチャイメージはデバイスメモリに置かれなければなりません。
3054 //!
3055 //! texObject は通常描画で使用されます。
3056 //!
3057 //! physicalAddress は Drawer の描画で使用されます。
3058 //!
3059 //! @param texObject テクスチャオブジェクトのハンドルです。
3060 //! @param physicalAddress テクスチャイメージの物理アドレスです。
3061 //! @param size 利用エリアのサイズ (幅, 高さ) です。
3062 //! @param realSize テクスチャのサイズ (幅, 高さ) です。
3063 //! @param format テクスチャのフォーマットです。
3064 //!
3065 //! @date 2010/05/14 physicalAddress 引数を追加しました。
3066 //! @date 2010/04/23 format 引数を追加しました。
3067 //! @since 2009/09/18 初版。
3068 //!
TextureInfo(u32 texObject,uptr physicalAddress,const TexSize & size,const TexSize & realSize,TexFormat format)3069 TextureInfo(
3070 u32 texObject,
3071 uptr physicalAddress,
3072 const TexSize& size,
3073 const TexSize& realSize,
3074 TexFormat format)
3075 {
3076 this->Set(texObject, physicalAddress, size, realSize, format);
3077 }
3078
3079 //@}
3080
3081 //----------------------------------------
3082 //! @name 設定/取得
3083 //@{
3084
3085 //! @brief テクスチャの情報を設定します。
3086 //!
3087 //! @details
3088 //! すべての設定をコピーします。
3089 //!
3090 //! @param src コピー元です。
3091 //!
3092 //! @since 2009/09/18 初版。
3093 //!
Set(const TextureInfo & src)3094 void Set(const TextureInfo& src)
3095 {
3096 *this = src;
3097 }
3098
3099 //! @brief テクスチャの情報を設定します。
3100 //!
3101 //! @details
3102 //! 指定の値を設定します。
3103 //!
3104 //! テクスチャイメージの一部を利用する場合に使用します。
3105 //! realSize の幅と高さは2のべき乗でなければなりません。
3106 //!
3107 //! テクスチャイメージはデバイスメモリに置かれなければなりません。
3108 //!
3109 //! texObject は通常描画で使用されます。
3110 //!
3111 //! physicalAddress は Drawer の描画で使用されます。
3112 //!
3113 //! @param texObject テクスチャオブジェクトのハンドルです。
3114 //! @param physicalAddress テクスチャイメージの物理アドレスです。
3115 //! @param size 利用エリアのサイズ (幅, 高さ) です。
3116 //! @param realSize テクスチャのサイズ (幅, 高さ) です。
3117 //! @param format テクスチャのフォーマットです。
3118 //!
3119 //! @date 2010/05/14 physicalAddress 引数を追加しました。
3120 //! @date 2010/04/23 format 引数を追加しました。
3121 //! @since 2009/09/18 初版。
3122 //!
Set(u32 texObject,uptr physicalAddress,const TexSize & size,const TexSize & realSize,TexFormat format)3123 void Set(
3124 u32 texObject,
3125 uptr physicalAddress,
3126 const TexSize& size,
3127 const TexSize& realSize,
3128 TexFormat format)
3129 {
3130 NW_ASSERT(IsPowerOfTwo(realSize.width));
3131 NW_ASSERT(IsPowerOfTwo(realSize.height));
3132
3133 m_TexObject = texObject;
3134 m_PhysicalAddress = physicalAddress;
3135 m_Size = size;
3136 m_RealSize = realSize;
3137 m_Format = format;
3138 }
3139
3140 //! @brief テクスチャオブジェクトを取得します。
3141 //!
3142 //! @return テクスチャオブジェクトへのハンドルを返します。
3143 //!
3144 //! @since 2009/09/18 初版。
3145 //!
GetTextureObject()3146 u32 GetTextureObject() const
3147 {
3148 return m_TexObject;
3149 }
3150
3151 //! @brief テクスチャの利用領域のサイズ (幅, 高さ) を取得します。
3152 //!
3153 //! @return テクスチャの利用領域のサイズ (幅, 高さ) を返します。
3154 //!
3155 //! @since 2009/09/18 初版。
3156 //!
GetSize()3157 const TexSize& GetSize() const
3158 {
3159 return m_Size;
3160 }
3161
3162 //! @brief テクスチャのサイズ (幅, 高さ) を取得します。
3163 //!
3164 //! @details
3165 //! テクスチャのサイズは幅、高さそれぞれ2のべき乗です。
3166 //!
3167 //! @return テクスチャのサイズ (幅, 高さ) を返します。
3168 //!
3169 //! @since 2009/09/18 初版。
3170 //!
GetRealSize()3171 const TexSize& GetRealSize() const
3172 {
3173 return m_RealSize;
3174 }
3175
3176 //! @brief テクスチャの物理アドレスを取得します。
3177 //!
3178 //! @return テクスチャの物理アドレスを返します。
3179 //!
3180 //! @since 2010/05/14 初版。GetTextureImage()を置き換えました。
3181 //!
GetPhysicalAddress()3182 uptr GetPhysicalAddress() const
3183 {
3184 return m_PhysicalAddress;
3185 }
3186
3187 //! @brief テクスチャフォーマットを取得します。
3188 //!
3189 //! @return テクスチャフォーマットを返します。
3190 //!
3191 //! @since 2010/04/23 初版。
3192 //!
GetFormat()3193 TexFormat GetFormat() const
3194 {
3195 return TexFormat(m_Format);
3196 }
3197
3198 //! @brief テクスチャが有効か調べます。
3199 //!
3200 //! @return テクスチャが有効な場合には true を返します。
3201 //!
3202 //! @since 2010/07/16 初版。
3203 //!
IsValid()3204 bool IsValid() const
3205 {
3206 #ifdef NW_PLATFORM_CTR
3207 return m_PhysicalAddress != 0;
3208 #else
3209 return m_TexObject != INVALID;
3210 #endif
3211 }
3212
3213 //@}
3214
3215 protected:
3216 //! @details :private
3217 //! value が 2 のべき数であれば true を返す。
IsPowerOfTwo(u32 value)3218 static bool IsPowerOfTwo(u32 value)
3219 {
3220 return (value & ~(value - 1)) == value;
3221 }
3222
3223 protected:
3224 //! @details :private
3225 u32 m_TexObject;
3226
3227 //! @details :private
3228 uptr m_PhysicalAddress;
3229
3230 //! @details :private
3231 TexSize m_Size;
3232
3233 //! @details :private
3234 TexSize m_RealSize;
3235
3236 //! @details :private
3237 u8 m_Format;
3238 };
3239
3240 //! @name 描画
3241 //@{
3242
3243 //! @brief ペインの四隅のテクスチャ座標を保持する配列の定義です。
3244 typedef nw::math::VEC2 TexCoordQuad[VERTEX_MAX];
3245
3246 //@}
3247
3248 //! @name リソースアクセサ
3249 //@{
3250
3251 //! 登録したフォントを表します。
3252 typedef const void* FontKey;
3253
3254 //! 登録したテクスチャを表します。
3255 typedef const void* TextureKey;
3256
3257 //@}
3258
3259 } // namespace nw::lyt
3260 } // namespace nw
3261
3262 #endif // NW_LYT_TYPES_H_
3263