1 /*!
2 	@file
3 	@author		Ustinov Igor aka Igor', DadyaIgor
4 	@date		09/2011
5 */
6 #ifndef MYGUI_DIRECTX11_RENDER_MANAGER_H_
7 #define MYGUI_DIRECTX11_RENDER_MANAGER_H_
8 
9 #include "MyGUI_Prerequest.h"
10 #include "MyGUI_RenderFormat.h"
11 #include "MyGUI_IVertexBuffer.h"
12 #include "MyGUI_RenderManager.h"
13 
14 struct ID3D11Device;
15 struct ID3D11DeviceContext;
16 struct ID3D11VertexShader;
17 struct ID3D11PixelShader;
18 struct ID3D11SamplerState;
19 struct ID3D11BlendState;
20 struct ID3D11RasterizerState;
21 struct ID3D11DepthStencilState;
22 struct ID3D11InputLayout;
23 
24 namespace MyGUI
25 {
26 
27 	class DirectX11RenderManager :
28 		public RenderManager,
29 		public IRenderTarget
30 	{
31 	public:
32 		DirectX11RenderManager();
33 
34 		void initialise(ID3D11Device* device);
35 		void shutdown();
36 
getInstance()37 		static DirectX11RenderManager& getInstance()
38 		{
39 			return *getInstancePtr();
40 		}
getInstancePtr()41 		static DirectX11RenderManager* getInstancePtr()
42 		{
43 			return static_cast<DirectX11RenderManager*>(RenderManager::getInstancePtr());
44 		}
45 
46 		/** @see RenderManager::getViewSize */
getViewSize()47 		virtual const IntSize& getViewSize() const
48 		{
49 			return mViewSize;
50 		}
51 
52 		/** @see RenderManager::getVertexFormat */
getVertexFormat()53 		virtual VertexColourType getVertexFormat()
54 		{
55 			return mVertexFormat;
56 		}
57 
58 		/** @see RenderManager::createVertexBuffer */
59 		virtual IVertexBuffer* createVertexBuffer();
60 		/** @see RenderManager::destroyVertexBuffer */
61 		virtual void destroyVertexBuffer(IVertexBuffer* _buffer);
62 
63 		/** @see RenderManager::createTexture */
64 		virtual ITexture* createTexture(const std::string& _name);
65 		/** @see RenderManager::destroyTexture */
66 		virtual void destroyTexture(ITexture* _texture);
67 		/** @see RenderManager::getTexture */
68 		virtual ITexture* getTexture(const std::string& _name);
69 
70 		/** @see RenderManager::isFormatSupported */
71 		virtual bool isFormatSupported(PixelFormat _format, TextureUsage _usage);
72 
73 		/** @see IRenderTarget::begin */
74 		virtual void begin();
75 		/** @see IRenderTarget::end */
76 		virtual void end();
77 
78 		/** @see IRenderTarget::doRender */
79 		virtual void doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count);
80 
81 		/** @see IRenderTarget::getInfo */
getInfo()82 		virtual const RenderTargetInfo& getInfo()
83 		{
84 			return mInfo;
85 		}
86 
87 		/** @see RenderManager::setViewSize */
88 		void setViewSize(int _width, int _height) override;
89 
90 		/*internal:*/
91 		void drawOneFrame();
92 
93 	private:
94 		void destroyAllResources();
95 
96 	public:
97 		ID3D11Device*            mpD3DDevice;
98 		ID3D11DeviceContext*     mpD3DContext;
99 		ID3D11VertexShader*      mVertexShader0, *mVertexShader1;
100 		ID3D11PixelShader*       mPixelShader0, *mPixelShader1;
101 		ID3D11SamplerState*      mSamplerState;
102 		ID3D11BlendState*        mBlendState;
103 		ID3D11RasterizerState*   mRasterizerState;
104 		ID3D11DepthStencilState* mDepthStencilState;
105 		ID3D11InputLayout*       mInputLayout0, *mInputLayout1;
106 
107 	private:
108 		IntSize                  mViewSize;
109 		VertexColourType         mVertexFormat;
110 		RenderTargetInfo         mInfo;
111 		bool                     mUpdate;
112 
113 		typedef std::map<std::string, ITexture*> MapTexture;
114 
115 		MapTexture           mTextures;
116 		bool                 mIsInitialise;
117 	};
118 
119 } // namespace MyGUI
120 
121 #endif // MYGUI_DIRECTX11_RENDER_MANAGER_H_
122