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