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