/*---------------------------------------------------------------------------* Project: NintendoWare File: SmRenderSystem.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: 18422 $ *---------------------------------------------------------------------------*/ #ifndef SM_RENDER_SYSTEM_H_ #define SM_RENDER_SYSTEM_H_ #include "../include/SmBase.h" #include #include #include #include #include #include #include #include #include #include #include //--------------------------------------------------------------------------- //! @brief 描画機能をまとめるためのクラスです。 //--------------------------------------------------------------------------- class SmRenderSystem : public SmBase { public: enum CommandBufferSide { COMMAND_BUFFER_SIZE_0 = 0, COMMAND_BUFFER_SIZE_1 = 1, COMMAND_BUFFER_SIZE_MAX = 2 }; //--------------------------------------------------------------------------- //! @brief 描画システムの設定内容です。 //--------------------------------------------------------------------------- struct Description { //! @brief 描画を行うスクリーンサイズを表します。 struct ScreenSize { s32 width; //!< スクリーンの横幅を表します。 s32 height; //!< スクリーンの縦幅を表します。 //! @brief コンストラクタです。 ScreenSize(s32 w, s32 h) : width(w), height(h) {} }; //! @brief スクリーンオフセットを表します。 struct ScreenOffset { s32 x; //!< オフセットのX座標を表します。 s32 y; //!< オフセットのY座標を表します。 //! @brief コンストラクタです。 ScreenOffset(s32 x, s32 y) : x(x), y(y) {} }; //! @brief 上画面のディスプレイバッファスワッパの設定内容です。 nw::demo::DisplayBufferSwapper::Description upperScreenDescription; //! @brief 下画面のディスプレイバッファスワッパの設定内容です。 nw::demo::DisplayBufferSwapper::Description lowerScreenDescription; nw::gfx::RenderColorFormat renderColorFormat; //!< スクリーンのカラーフォーマットを表します。 size_t displayBufferCount; //!< 生成するディスプレイバッファの数です。 size_t maxGpuProfilingEntryCount; //!< コマンドリストの GPU プロファイラエントリの上限数を表します。 //! @brief コンストラクタです。 //! 立体視表示をしない場合のデフォルト値がセットされます。 Description() : renderColorFormat(nw::gfx::RENDER_COLOR_FORMAT_RGBA8), displayBufferCount(2), maxGpuProfilingEntryCount(8) { upperScreenDescription.screenKind = nw::demo::UPPER_SCREEN; upperScreenDescription.width = NN_GX_DISPLAY0_HEIGHT; upperScreenDescription.height = NN_GX_DISPLAY0_WIDTH; lowerScreenDescription.screenKind = nw::demo::LOWER_SCREEN; lowerScreenDescription.width = NN_GX_DISPLAY1_HEIGHT; lowerScreenDescription.height = NN_GX_DISPLAY1_WIDTH; } }; //---------------------------------------- // コンストラクタです。 SmRenderSystem( const Description& description ); //---------------------------------------- // デストラクタです。 ~SmRenderSystem(); //---------------------------------------- // レンダターゲットを設定します。 void SetRenderTarget( nw::gfx::IRenderTarget* renderTarget ); //---------------------------------------- // バッファを消去します。 void ClearBuffer( nw::ut::FloatColor clearColor ); //---------------------------------------- // バッファを転送します。 void TransferBuffer(s32 screenKind); //---------------------------------------- // コマンドリスト処理の終了待ちを行います。 void WaitCommandList(); //---------------------------------------- // VSync 待ちを行います。 void WaitVSync(s32 screenKind); //---------------------------------------- // バッファのスワップを予約します。 void SwapBuffer( s32 screenKind ); //---------------------------------------- // RenderContextを取得します。 nw::gfx::RenderContext* GetRenderContext() { return m_RenderContext; } // 視差計算 void CalcStereoCamera( nw::gfx::Camera* leftCamera, nw::gfx::Camera* rightCamera, nw::gfx::Camera* baseCamera, f32 depthLevel = 1.0f, f32 depthRange = 1.0f); GLuint GetCacheCmdListUpper(CommandBufferSide size) { return m_CacheCmdListUpper[size]; } GLuint GetCacheCmdListLower() { return m_CacheCmdListLower; } private: NW_INLINE void CreateInternal_(); nw::gfx::RenderContext* m_RenderContext; nw::demo::DisplayBufferSwapper* m_UpperSwapper; nw::demo::DisplayBufferSwapper* m_LowerSwapper; nw::demo::DisplayBufferSwapper* m_ExtensionSwapper; GLuint m_CacheCmdListUpper[COMMAND_BUFFER_SIZE_MAX]; GLuint m_CacheCmdListLower; nn::ulcd::CTR::StereoCamera* m_StereoCamera; nw::gfx::IRenderTarget* m_RenderTarget; }; //--------------------------------------------------------------------------- //! @brief グラフィックスシステムに必要な各種初期化を行います。 //--------------------------------------------------------------------------- void SmInitializeGraphicsSystem(nw::demo::DemoAllocator* deviceAllocator); //--------------------------------------------------------------------------- //! @brief グラフィックスシステムの終了処理を行います。 //--------------------------------------------------------------------------- void SmFinalizeGraphicsSystem(nw::demo::DemoAllocator* deviceAllocator); #endif // SM_RENDER_SYSTEM_H_