/*---------------------------------------------------------------------------* 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 上画面の表示モードを表す定義です。 //! nngxExtensionMode で指定する引数となります。 //--------------------------------------------------------------------------- enum UpperScreenMode { UPPER_SCREEN_MODE_NORMAL = NN_GX_DISPLAYMODE_NORMAL, //!< 通常モードを表します。 UPPER_SCREEN_MODE_STEREO = NN_GX_DISPLAYMODE_STEREO //!< 3Dモードを表します。 }; */ //--------------------------------------------------------------------------- //! @brief 描画機能をまとめるためのクラスです。 //--------------------------------------------------------------------------- class SmRenderSystem : public SmBase { public: //--------------------------------------------------------------------------- //! @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 commandBufferSize; //!< コマンドバッファのサイズを現します。 size_t commandRequestCount; //!< コマンドリクエストの上限数を表します。 size_t reusableCommandBufferSize; //!< 再利用コマンドリストのコマンドバッファのサイズを現します。 size_t reusableCommandRequestCount; //!< 再利用コマンドリストのコマンドリクエストの上限数を表します。 // UpperScreenMode upperScreenMode; //!< 上画面のモードです。 size_t commandListCount; //!< 生成するコマンドリストの数です。 size_t displayBufferCount; //!< 生成するディスプレイバッファの数です。 size_t maxGpuProfilingEntryCount; //!< コマンドリストの GPU プロファイラエントリの上限数を表します。 //! @brief コンストラクタです。 //! 立体視表示をしない場合のデフォルト値がセットされます。 Description() : renderColorFormat(nw::gfx::RENDER_COLOR_FORMAT_RGBA8), commandBufferSize(0x100000), commandRequestCount(512), reusableCommandBufferSize(0), reusableCommandRequestCount(0), // upperScreenMode(NN_GX_DISPLAYMODE_STEREO), commandListCount(2), 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); // test GLuint GetCacheCmdListUpper() { return m_CacheCmdListUpper; } GLuint GetCacheCmdListLower() { return m_CacheCmdListLower; } GLuint GetCommandList() { return m_CommandList; } private: //! @brief CreateRenderSystemの内部メソッドです。 NW_INLINE void CreateInternal_(const Description& description); nw::gfx::RenderContext* m_RenderContext; nw::demo::DisplayBufferSwapper* m_UpperSwapper; nw::demo::DisplayBufferSwapper* m_LowerSwapper; nw::demo::DisplayBufferSwapper* m_ExtensionSwapper; GLuint m_CommandList; GLuint m_CacheCmdListUpper; 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_