/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.12.17 * ³» ¿ë : ·»´õ¸µ ½Ã½ºÅÛ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Renderer.h" class cAppWindow; class cShaderHelper; /// ·»´õ¸µ ¿É¼Ç class cRenderOption { public: cRenderOption(); public: /// Å©±â unsigned int mWidth; unsigned int mHeight; /// Ç÷¡±×°ª unsigned int mFlags; /// ¾î´ðÅÍ unsigned int mAdapter; /// ¹é¹öÆÛ ¼ö unsigned int mBackBufferCount; /// °»½ÅÀ² unsigned int mRefreshRate; /// ·»´õ·¯ Á¤º¸ NiDX9Renderer::DeviceDesc mDeviceDesc; NiDX9Renderer::FrameBufferFormat mFrameBufferFormat; NiDX9Renderer::DepthStencilFormat mDepthStencilFormat; NiDX9Renderer::PresentationInterval mPresentationInterval; NiDX9Renderer::SwapEffect mSwapEffect; NiDX9Renderer::FramebufferMode mFrameBufferMode; }; inline cRenderOption::cRenderOption() { mWidth = 800; mHeight = 600; mFlags = NiDX9Renderer::USE_MULTITHREADED; mAdapter = D3DADAPTER_DEFAULT; mBackBufferCount = 1; mRefreshRate = NiDX9Renderer::REFRESHRATE_DEFAULT; mDeviceDesc = NiDX9Renderer::DEVDESC_PURE; mFrameBufferFormat = NiDX9Renderer::FBFMT_X8R8G8B8;//FBFMT_UNKNOWN; mDepthStencilFormat = NiDX9Renderer::DSFMT_UNKNOWN; mPresentationInterval = NiDX9Renderer::PRESENT_INTERVAL_IMMEDIATE; mSwapEffect = NiDX9Renderer::SWAPEFFECT_DEFAULT; mFrameBufferMode = NiDX9Renderer::FBMODE_DEFAULT;//NiDX9Renderer::FBMODE_MULTISAMPLES_2; } /// ·»´õ¸µ ½Ã½ºÅÛ class cRenderSystem { static cRenderSystem* mSingleton; public: cRenderSystem( cAppWindow* window ); ~cRenderSystem(); /// ÃʱâÈ­ bool Init(); /// ·»´õ¸µ void Render(); void BeginFrame(); void EndFrame(); void DisplayFrame(); /// Àç¼³Á¤ void Reset(); /// È­¸é Å©±â void SetScreenSize( unsigned int width, unsigned int height ); unsigned int GetScreenWidth() const; unsigned int GetScreenHeight() const; inline void SetClearColor( NiColor color ) { mClearColor = color; } /// È­¸é ¸ðµå º¯°æ void ToggleScreenMode(); /// Àüü È­¸é ¿©ºÎ bool IsFullScreen() const; /// ·»´õ¸µ ¿É¼Ç const cRenderOption* GetOption() const; /// ·»´õ·¯ cRenderer* GetRenderer(); private: /// ·»´õ·¯¸¦ »ý¼º bool CreateRenderer(); public: /// ´ÜÀÏü¸¦ ¸®ÅÏ static cRenderSystem* GetSingleton(); private: /// ·»´õ¸µ ¿É¼Ç cRenderOption mRenderOption; /// ·»´õ·¯ cRendererPtr mRenderer; /// ¾îÇø®ÄÉÀÌ¼Ç À©µµ¿ì cAppWindow* mWindow; NiColor mClearColor; }; inline void cRenderSystem::SetScreenSize( unsigned int w, unsigned int h ) { mRenderOption.mWidth = w; mRenderOption.mHeight = h; } inline unsigned int cRenderSystem::GetScreenWidth() const { return mRenderOption.mWidth; } inline unsigned int cRenderSystem::GetScreenHeight() const { return mRenderOption.mHeight; } inline bool cRenderSystem::IsFullScreen() const { return (mRenderOption.mFlags & NiDX9Renderer::USE_FULLSCREEN) ? true : false; } inline const cRenderOption* cRenderSystem::GetOption() const { return &mRenderOption; } inline cRenderer* cRenderSystem::GetRenderer() { return mRenderer; } inline cRenderSystem* cRenderSystem::GetSingleton() { return mSingleton; } #define RENDERSYS cRenderSystem::GetSingleton()