1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     GfxCtrl.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: 1 $
14  *---------------------------------------------------------------------------*/
15 #ifndef GFX_CTRL_H_
16 #define GFX_CTRL_H_
17 
18 
19 #include <nw/gfx.h>
20 #include "../include/SmBase.h"
21 #include "../include/SmModel.h"
22 #include "../include/SmCamera.h"
23 #include "../include/SmSceneCtrl.h"
24 #include "../include/SmParticle.h"
25 
26 
27 //------------------------------------------------------------------------------
28 //! Gfx���\�[�X�Ɋւ���N���X�������E�j������N���X�ł��B
29 class GfxCtrl : public SmBase
30 {
31 public:
32     //! ���\�[�X��z�u����VRAM�^�C�v�ł��B
33     enum
34     {
35         GFX_CTRL_VRAM_A = NN_GX_MEM_VRAMA,
36         GFX_CTRL_VRAM_B = NN_GX_MEM_VRAMB,
37         GFX_CTRL_VRAM_NONE
38     };
39     typedef u32 GfxVramType;
40 
41     //! ���[�h���ꂽ���\�[�X���Ǘ����邽�߂̍\���̂ł��B
42     struct GfxResourceSet
43     {
44         nw::ut::MoveArray<u8>       buffer;
45         nw::gfx::ResGraphicsFile    resource;
46     };
47     #define GFX_RES_ARRAY_COUNT (32)
48 
49     //! ���[�h���ꂽ���\�[�X��ێ����邽�߂̔z��ł��B
50     typedef nw::ut::FixedSizeArray<GfxResourceSet, GFX_RES_ARRAY_COUNT>         GfxResourceArray;
51 
52     //! �������ꂽSmModel�C���X�^���X��ێ����邽�߂̔z��ł��B
53     typedef nw::ut::FixedSizeArray<SmModel*, GFX_RES_ARRAY_COUNT>               SmModelInstanceArray;
54 
55     //! �������ꂽ�A�j���[�V������ێ����邽�߂̔z��ł��B
56     typedef nw::ut::FixedSizeArray<nw::gfx::AnimObject*, GFX_RES_ARRAY_COUNT>   GfxAnimObjectArray;
57 
58 public:
59     //! �R���X�g���N�^�ł��B
60     GfxCtrl( SmSceneCtrl* sceneCtrl );
61 
62     //! �f�X�g���N�^�ł��B
63     ~GfxCtrl();
64 
65     //! SmModel�N���X�̃C���X�^���X�������܂��B
66     SmModel* CreateModel( SmModel* parentModel, const wchar_t* resourcePath, GfxVramType vramType );
67 
68     //! �p�[�e�B�N���������܂��B
69     SmParticle* CreateParticle( const wchar_t* resourcePath, GfxVramType vramType );
70 
71     //! ���C�g/�t�H�O/�V�[���‹���ݒ肵�܂��B
72     void CreateSceneEnvironment( const wchar_t* resourcePath );
73 
74     //! �J�����������܂��B
75     void CreateCamera( const wchar_t* resourcePath );
76 
77     //! �V�[���̏��������s���܂��B
78     void InitializeScene();
79 
80     //! �V�[���̃g���o�[�X���s���܂��B
81     void TraverseScene();
82 
83     //! �V�[���̍X�V���s���܂��B
84     void Update();
85 
86 
87     //! ���[�g�m�[�h���擾���܂��B
GetSceneRoot()88     nw::gfx::SceneNode* GetSceneRoot() { return m_SceneRoot; }
89 
90     //! �V�[���‹��ݒ���擾���܂��B
GetSceneEnvSetting()91     nw::gfx::SceneEnvironmentSetting* GetSceneEnvSetting() { return m_SceneEnvSetting; }
92 
93     //! nw::gfx::Camera�̃C���X�^���X���擾���܂��B
GetCamera()94     nw::gfx::Camera* GetCamera()
95     {
96         return m_SmCamera->GetGxCamera();
97     }
98 
99     //! SmCamera�̃C���X�^���X���擾���܂��B
GetSmCamera()100     SmCamera* GetSmCamera()
101     {
102         return m_SmCamera;
103     }
104 
105     //! �V�[����SmModel��lj����܂��B
106     bool AddModel( SmModel* model );
107 
108     //! ���C�g�̃A�j���[�V�������擾���܂��B
GetLightAnimEvaluator()109     nw::gfx::AnimEvaluator* GetLightAnimEvaluator()
110     {
111         return m_LightAnimation;
112     }
113 
114     // SceneCtrl�̃��O�o��
OutputLog()115     void OutputLog()
116     {
117         m_GfxSceneCtrl->OutputLog();
118     }
119 
120 private:
121     SmSceneCtrl*                        m_GfxSceneCtrl;
122 
123     nw::gfx::SceneNode*                 m_SceneRoot;
124     nw::gfx::Camera*                    m_Camera;
125     nw::gfx::Camera*                    m_ResCamera;
126     SmCamera*                           m_SmCamera;
127     SmParticle*                         m_SmParticle;
128 
129     nw::gfx::ParticleContext*           m_ParticleContext;
130     nw::gfx::ParticleSceneUpdater*      m_ParticleSceneUpdater;
131 
132     GfxResourceArray                    m_ResourcesArray;
133     GfxAnimObjectArray                  m_AnimationArray;
134     SmModelInstanceArray                m_SmModelInstArray;
135 
136     nw::gfx::SceneEnvironmentSetting*   m_SceneEnvSetting;
137 
138     nw::gfx::AnimEvaluator*             m_LightAnimation;
139 };
140 
141 
142 #endif  // GFX_CTRL_H_
143