1 /*!
2 	@file
3 	@author		Albert Semenov
4 	@date		08/2012
5 */
6 
7 #ifndef _1fa6ce0c_1576_452a_98d8_ac49ed9e38d1_
8 #define _1fa6ce0c_1576_452a_98d8_ac49ed9e38d1_
9 
10 #include "MyGUI_Prerequest.h"
11 #include "MyGUI_RenderFormat.h"
12 #include "MyGUI_RenderManager.h"
13 #include "MyGUI_ExportTexture.h"
14 #include "MyGUI_ExportVertexBuffer.h"
15 #include "RenderBatchInfo.h"
16 
17 namespace MyGUI
18 {
19 
20 	class ExportRenderManager :
21 		public RenderManager,
22 		public IRenderTarget
23 	{
24 	public:
25 		ExportRenderManager();
26 
27 		void initialise();
28 		void shutdown();
29 
30 		static ExportRenderManager& getInstance();
31 		static ExportRenderManager* getInstancePtr();
32 
33 		/** @see RenderManager::getViewSize */
34 		virtual const IntSize& getViewSize() const;
35 
36 		/** @see RenderManager::getVertexFormat */
37 		virtual VertexColourType getVertexFormat();
38 
39 		/** @see RenderManager::createVertexBuffer */
40 		virtual IVertexBuffer* createVertexBuffer();
41 		/** @see RenderManager::destroyVertexBuffer */
42 		virtual void destroyVertexBuffer(IVertexBuffer* _buffer);
43 
44 		/** @see RenderManager::createTexture */
45 		virtual ITexture* createTexture(const std::string& _name);
46 		/** @see RenderManager::destroyTexture */
47 		virtual void destroyTexture(ITexture* _texture);
48 		/** @see RenderManager::getTexture */
49 		virtual ITexture* getTexture(const std::string& _name);
50 
51 		/** @see RenderManager::isFormatSupported */
52 		virtual bool isFormatSupported(PixelFormat _format, TextureUsage _usage);
53 
54 		/** @see IRenderTarget::begin */
55 		virtual void begin();
56 		/** @see IRenderTarget::end */
57 		virtual void end();
58 
59 		/** @see IRenderTarget::doRender */
60 		virtual void doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count);
61 
62 		/** @see IRenderTarget::getInfo */
63 		virtual const RenderTargetInfo& getInfo();
64 
65 		/** @see RenderManager::setViewSize */
66 		void setViewSize(int _width, int _height) override;
67 
68 		/*internal:*/
69 		void drawOneFrame();
70 
71 		RenderBatchInfo* getBatchInfo(size_t _index);
72 		void addTexture(const std::string& _name, size_t _id, int _width, int _height);
73 
74 		void doRenderLayer(ILayer* _layer);
75 
76 	private:
77 		void destroyAllTextures();
78 
79 	private:
80 		IntSize mViewSize;
81 		RenderTargetInfo mInfo;
82 		typedef std::map<std::string, ExportTexture*> MapTexture;
83 		MapTexture mTextures;
84 		bool mUpdate;
85 		typedef std::vector<RenderBatchInfo> VectorBatchInfo;
86 		VectorBatchInfo mBatchInfo;
87 		typedef std::vector<ExportVertexBuffer*> VectorExportVertexBuffer;
88 		VectorExportVertexBuffer mExportVertexBuffer;
89 		ILayer* mCurrentLayer;
90 	};
91 
92 }
93 
94 #endif
95