/*---------------------------------------------------------------------------* Project: NintendoWare File: gfx_ISceneUpdater.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: 23256 $ *---------------------------------------------------------------------------*/ #ifndef NW_GFX_ISCENEUPDATER_H_ #define NW_GFX_ISCENEUPDATER_H_ #include #include namespace nw { namespace gfx { class SceneContext; class SceneNode; class Camera; //--------------------------------------------------------------------------- //! @brief シーンの更新を行うためのインターフェースです。 //--------------------------------------------------------------------------- class ISceneUpdater : public GfxObject { private: NW_DISALLOW_COPY_AND_ASSIGN(ISceneUpdater); public: NW_UT_RUNTIME_TYPEINFO; //! @brief 描画ソートモードです。 enum RenderSortMode { ALL_MESH_BASE_SORT, //!< 全てメッシュベースで深度計算するモードです。 OPAQUE_MESH_BASE_AND_TRANSLUCENT_MODEL_BASE_SORT //!< 不透明はメッシュベース、半透明はモデルベースで深度計算するモードです。 }; //! @brief 深度ソートモードです。 enum DepthSortMode { SORT_DEPTH_OF_ALL_MESH, //!< すべてのメッシュの深度ソートを行います。 SORT_DEPTH_OF_TRANSLUCENT_MESH //!< 半透明メッシュのみ深度ソートを行います。 }; //! @brief 表示するモデルを識別するための関数オブジェクトの基底クラスです。 //! //! @sa SubmitView //! class IsVisibleModelFunctor { public: virtual bool IsVisible(const nw::gfx::Model* model) { NW_UNUSED_VARIABLE(model); return true; } }; //---------------------------------------- //! @name 取得/設定 //@{ //! @brief 深度ソートモードを取得します。 virtual DepthSortMode GetDepthSortMode() const = 0; //! @brief 深度ソートモードを設定します。 virtual void SetDepthSortMode(DepthSortMode depthSortMode) = 0; //@} //---------------------------------------- //! @name 更新 //@{ //! @brief シーンを更新します。アニメーションの更新も同時に行います。 //! //! @param[in] sceneContext シーンコンテキストです。 //! virtual void UpdateAll(SceneContext* sceneContext) = 0; //! @brief カメラの視界に基づいてシーンを更新し、描画キューを構築します。 //! //! layerId は下の例のような用途で用いることを想定しています。 //! //! ・フルスクリーンエフェクトやHUD、シーンの描画順を制御@n //! ・複数ビューポートの描画を分割@n //! ・ビューポート内の描画順を制御@n //! //! 上記の各優先順位をビット幅ごとに区切って、8 ビット内に収まるようにして //! layerId を生成してください。 //! //! @param[in] renderQueue 描画対象となる要素を集めたキューです。 //! @param[in] sceneContext シーンコンテキストです。 //! @param[in] camera カメラです。 //! @param[in] layerId 描画要素のソート時に最優先に区分される ID です。レイヤーやビューポートの描画を制御するのに用います。 //! @param[in] renderSortMode 描画ソートモードです。 //! virtual void SubmitView( RenderQueue* renderQueue, SceneContext* sceneContext, const Camera& camera, u8 layerId, RenderSortMode renderSortMode = ALL_MESH_BASE_SORT) = 0; //! @brief カメラの視界に基づいてシーンを更新し、描画キューを構築します。 //! //! パーティクルを別レイヤーで描画するための SubmitView です。 //! //! @param[in] renderQueue 描画対象となる要素を集めたキューです。 //! @param[in] sceneContext シーンコンテキストです。 //! @param[in] camera カメラです。 //! @param[in] layerId 描画要素のソート時に最優先に区分される ID です。レイヤーやビューポートの描画を制御するのに用います。 //! @param[in] particleLayerId パーティクル描画用の layerId です。 //! @param[in] renderSortMode 描画ソートモードです。 //! virtual void SubmitView( RenderQueue* renderQueue, SceneContext* sceneContext, const Camera& camera, u8 layerId, u8 particleLayerId, RenderSortMode renderSortMode = ALL_MESH_BASE_SORT) = 0; //! @brief カメラの視界に基づいてシーンを更新し、描画キューを構築します。 //! //! 表示するモデルを関数オブジェクトで指定できる SubmitView です。 //! //! @param[in] renderQueue 描画対象となる要素を集めたキューです。 //! @param[in] sceneContext シーンコンテキストです。 //! @param[in] camera カメラです。 //! @param[in] layerId 描画要素のソート時に最優先に区分される ID です。レイヤーやビューポートの描画を制御するのに用います。 //! @param[in] particleLayerId パーティクル描画用の layerId です。 //! @param[in] isVisibleModel 表示するモデルを識別するための関数オブジェクトです。 //! @param[in] renderSortMode 描画ソートモードです。 //! virtual void SubmitView( RenderQueue* renderQueue, SceneContext* sceneContext, const Camera& camera, u8 layerId, u8 particleLayerId, IsVisibleModelFunctor* isVisibleModel, RenderSortMode renderSortMode = ALL_MESH_BASE_SORT) = 0; //@} protected: //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! コンストラクタです。 ISceneUpdater(os::IAllocator* allocator) : GfxObject(allocator) {} //@} }; } // namespace gfx } // namespace nw #endif // NW_GFX_ISCENEUPDATER_H_