#pragma once #include "IEngine.h" #include "ISwapChain.h" #include "../RenderTargetBase.h" class SwapChain : public RenderTargetBase , public ISwapChain { public: SwapChain(IEngine& argEngine); virtual ~SwapChain(); virtual void SetWindowParameters(HWND argWindowHandle, uint32 argWidth = 0, uint32 argHeight = 0, uint32 argRefreshRate = 0, DataFormat::Enumeration argFormat = DataFormat::Unknown, uint32 argMultiSampleCount = 0, uint32 argMultiSampleQuality = 0); virtual void Resize(int argWidth, int argHeight); virtual void Present(); virtual bool get_Fullscreen() const { return !m_SwapChainDescription.Windowed; } virtual void set_Fullscreen(bool argState); virtual bool get_VSync() const { return m_VSync; } virtual void set_VSync(bool argState) {m_VSync = argState; } virtual IRenderTargetBase& get_Base() { return *dynamic_cast(this); } // IRenderTargetBase virtual uint32 get_RenderTargetWidth() const { return m_SwapChainDescription.BufferDesc.Width; } virtual uint32 get_RenderTargetHeight() const { return m_SwapChainDescription.BufferDesc.Height; } virtual DataFormat::Enumeration get_RenderTargetFormat() const { return (DataFormat::Enumeration)m_SwapChainDescription.BufferDesc.Format; } protected: //ICommandUser virtual string8 get_UserName() const { return "SwapChain"; } protected: void RetriveData(); virtual void Uninitialize(); private: DXGI_SWAP_CHAIN_DESC m_SwapChainDescription; IDXGISwapChain* m_SwapChain; bool m_VSync; };