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