/*---------------------------------------------------------------------------* Project: NintendoWare File: GfxCtrl.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 1 $ *---------------------------------------------------------------------------*/ #ifndef GFX_CTRL_H_ #define GFX_CTRL_H_ #include #include "../include/SmBase.h" #include "../include/SmModel.h" #include "../include/SmCamera.h" #include "../include/SmSceneCtrl.h" #include "../include/SmParticle.h" //------------------------------------------------------------------------------ //! Gfxリソースに関するクラス等を生成・破棄するクラスです。 class GfxCtrl : public SmBase { public: //! リソースを配置するVRAMタイプです。 enum { GFX_CTRL_VRAM_A = NN_GX_MEM_VRAMA, GFX_CTRL_VRAM_B = NN_GX_MEM_VRAMB, GFX_CTRL_VRAM_NONE }; typedef u32 GfxVramType; //! ロードされたリソースを管理するための構造体です。 struct GfxResourceSet { nw::ut::MoveArray buffer; nw::gfx::ResGraphicsFile resource; }; #define GFX_RES_ARRAY_COUNT (32) //! ロードされたリソースを保持するための配列です。 typedef nw::ut::FixedSizeArray GfxResourceArray; //! 生成されたSmModelインスタンスを保持するための配列です。 typedef nw::ut::FixedSizeArray SmModelInstanceArray; //! 生成されたアニメーションを保持するための配列です。 typedef nw::ut::FixedSizeArray GfxAnimObjectArray; public: //! コンストラクタです。 GfxCtrl( SmSceneCtrl* sceneCtrl ); //! デストラクタです。 ~GfxCtrl(); //! SmModelクラスのインスタンスを生成します。 SmModel* CreateModel( SmModel* parentModel, const wchar_t* resourcePath, GfxVramType vramType ); //! パーティクルを生成します。 SmParticle* CreateParticle( const wchar_t* resourcePath ); //! ライト/フォグ/シーン環境を設定します。 void CreateSceneEnvironment( const wchar_t* resourcePath ); //! カメラを生成します。 void CreateCamera( const wchar_t* resourcePath ); //! シーンの初期化を行います。 void InitializeScene(); //! シーンのトラバースを行います。 void TraverseScene(); //! シーンの更新を行います。 void Update(); //! ルートノードを取得します。 nw::gfx::SceneNode* GetSceneRoot() { return m_SceneRoot; } //! シーン環境設定を取得します。 nw::gfx::SceneEnvironmentSetting* GetSceneEnvSetting() { return m_SceneEnvSetting; } //! nw::gfx::Cameraのインスタンスを取得します。 nw::gfx::Camera* GetCamera() { return m_SmCamera->GetGxCamera(); } //! SmCameraのインスタンスを取得します。 SmCamera* GetSmCamera() { return m_SmCamera; } //! シーンにSmModelを追加します。 bool AddModel( SmModel* model ); //! ライトのアニメーションを取得します。 nw::gfx::AnimEvaluator* GetLightAnimEvaluator() { return m_LightAnimation; } private: SmSceneCtrl* m_GfxSceneCtrl; nw::gfx::SceneNode* m_SceneRoot; nw::gfx::Camera* m_Camera; nw::gfx::Camera* m_ResCamera; SmCamera* m_SmCamera; SmParticle* m_SmParticle; nw::gfx::ParticleContext* m_ParticleContext; nw::gfx::ParticleSceneUpdater* m_ParticleSceneUpdater; GfxResourceArray m_ResourcesArray; GfxAnimObjectArray m_AnimationArray; SmModelInstanceArray m_SmModelInstArray; nw::gfx::SceneEnvironmentSetting* m_SceneEnvSetting; nw::gfx::AnimEvaluator* m_LightAnimation; }; #endif // GFX_CTRL_H_