1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: gfx_SceneInitializer.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: 24209 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_GFX_SCENEINITIALIZER_H_ 17 #define NW_GFX_SCENEINITIALIZER_H_ 18 19 #include <nw/gfx/gfx_ISceneVisitor.h> 20 21 namespace nw 22 { 23 namespace gfx 24 { 25 26 class IMaterialIdGenerator; 27 28 //--------------------------------------------------------------------------- 29 //! @brief シーン内を探索して初期化を行います。 30 //--------------------------------------------------------------------------- 31 class SceneInitializer : public ISceneVisitor 32 { 33 private: 34 NW_DISALLOW_COPY_AND_ASSIGN(SceneInitializer); 35 36 public: 37 NW_UT_RUNTIME_TYPEINFO; 38 39 //! @brief 設定内容です。 40 struct Description 41 { 42 IMaterialIdGenerator* materialIdGenerator; //!< マテリアルIDのジェネレータです。 43 44 //! @brief コンストラクタです。 DescriptionDescription45 Description() 46 : materialIdGenerator(NULL) 47 {} 48 }; 49 50 //! シーンイニシャライザーを構築するためのクラスです。 51 class Builder 52 { 53 public: 54 //! @brief マテリアルIDジェネレーターを設定します。 55 //! 所有権が移動しますので SceneInitializer を破棄する際に一緒に破棄されます。 MaterialIdGenerator(IMaterialIdGenerator * materialIdGenerator)56 Builder& MaterialIdGenerator(IMaterialIdGenerator* materialIdGenerator) 57 { 58 m_Description.materialIdGenerator = materialIdGenerator; 59 return *this; 60 } 61 62 //! @brief シーンイニシャライザーを生成します。 63 //! 64 //! @param[in] allocator アロケータです。 65 //! 66 //! @return 生成したイニシャライザーを返します。 67 //! 68 SceneInitializer* Create(os::IAllocator* allocator); 69 70 private: 71 Description m_Description; 72 }; 73 74 //! @brief シーンイニシャライズの前処理を行います。 75 //! 76 void Begin(); 77 78 //! @brief シーンイニシャライズの後処理を行います。 79 //! 80 //! マテリアルIDの生成などが行われますので、必ず呼び出す必要があります。 81 //! 82 void End(); 83 84 //---------------------------------------- 85 //! @name ビジターの実装 86 //@{ 87 VisitSceneNode(SceneNode *)88 virtual void VisitSceneNode(SceneNode*) {} VisitTransformNode(TransformNode *)89 virtual void VisitTransformNode(TransformNode*) {} 90 virtual void VisitModel(Model* model); 91 virtual void VisitSkeletalModel(SkeletalModel* model); VisitCamera(Camera *)92 virtual void VisitCamera(Camera*) {} VisitFog(Fog *)93 virtual void VisitFog(Fog*) {} VisitLight(Light *)94 virtual void VisitLight(Light*) {} VisitFragmentLight(FragmentLight *)95 virtual void VisitFragmentLight(FragmentLight*) {} 96 #if defined(NW_GFX_VERTEX_LIGHT_ENABLED) VisitVertexLight(VertexLight *)97 virtual void VisitVertexLight(VertexLight*) {} 98 #endif VisitAmbientLight(AmbientLight *)99 virtual void VisitAmbientLight(AmbientLight*) {} VisitHemiSphereLight(HemiSphereLight *)100 virtual void VisitHemiSphereLight(HemiSphereLight*) {} VisitParticleSet(ParticleSet *)101 virtual void VisitParticleSet(ParticleSet*) {} VisitParticleEmitter(ParticleEmitter *)102 virtual void VisitParticleEmitter(ParticleEmitter*) {} VisitParticleModel(ParticleModel *)103 virtual void VisitParticleModel(ParticleModel*) {} 104 105 //@} 106 107 private: 108 SceneInitializer(os::IAllocator * allocator,Description description)109 SceneInitializer(os::IAllocator* allocator, Description description) 110 : ISceneVisitor(allocator), 111 m_MaterialIdGenerator(description.materialIdGenerator) 112 {} 113 ~SceneInitializer()114 virtual ~SceneInitializer() {} 115 116 GfxPtr<IMaterialIdGenerator> m_MaterialIdGenerator; 117 }; 118 119 } // namespace gfx 120 } // namespace nw 121 122 #endif // NW_GFX_SCENEINITIALIZER_H_ 123