1 /*! 2 @file 3 @author George Evmenov 4 @date 07/2009 5 */ 6 7 #ifndef MYGUI_OPENGL3_RENDER_MANAGER_H_ 8 #define MYGUI_OPENGL3_RENDER_MANAGER_H_ 9 10 #include "MyGUI_Prerequest.h" 11 #include "MyGUI_RenderFormat.h" 12 #include "MyGUI_IVertexBuffer.h" 13 #include "MyGUI_RenderManager.h" 14 #include "MyGUI_OpenGL3ImageLoader.h" 15 16 namespace MyGUI 17 { 18 19 class OpenGL3RenderManager : 20 public RenderManager, 21 public IRenderTarget 22 { 23 public: 24 OpenGL3RenderManager(); 25 26 void initialise(OpenGL3ImageLoader* _loader = nullptr); 27 void shutdown(); 28 29 static OpenGL3RenderManager& getInstance(); 30 static OpenGL3RenderManager* getInstancePtr(); 31 32 /** @see RenderManager::getViewSize */ 33 virtual const IntSize& getViewSize() const; 34 35 /** @see RenderManager::getVertexFormat */ 36 virtual VertexColourType getVertexFormat(); 37 38 /** @see RenderManager::isFormatSupported */ 39 virtual bool isFormatSupported(PixelFormat _format, TextureUsage _usage); 40 41 /** @see RenderManager::createVertexBuffer */ 42 virtual IVertexBuffer* createVertexBuffer(); 43 /** @see RenderManager::destroyVertexBuffer */ 44 virtual void destroyVertexBuffer(IVertexBuffer* _buffer); 45 46 /** @see RenderManager::createTexture */ 47 virtual ITexture* createTexture(const std::string& _name); 48 /** @see RenderManager::destroyTexture */ 49 virtual void destroyTexture(ITexture* _texture); 50 /** @see RenderManager::getTexture */ 51 virtual ITexture* getTexture(const std::string& _name); 52 53 54 /** @see IRenderTarget::begin */ 55 virtual void begin(); 56 /** @see IRenderTarget::end */ 57 virtual void end(); 58 /** @see IRenderTarget::doRender */ 59 virtual void doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count); 60 /** @see IRenderTarget::getInfo */ 61 virtual const RenderTargetInfo& getInfo(); 62 63 /** @see RenderManager::setViewSize */ 64 void setViewSize(int _width, int _height) override; 65 66 /* for use with RTT, flips Y coordinate when rendering */ 67 void doRenderRtt(IVertexBuffer* _buffer, ITexture* _texture, size_t _count); 68 69 /*internal:*/ 70 void drawOneFrame(); 71 bool isPixelBufferObjectSupported() const; 72 unsigned int createShaderProgram(void); 73 74 private: 75 void destroyAllResources(); 76 77 private: 78 IntSize mViewSize; 79 bool mUpdate; 80 VertexColourType mVertexFormat; 81 RenderTargetInfo mInfo; 82 unsigned int mProgramID; 83 unsigned int mReferenceCount; // for nested rendering 84 int mYScaleUniformLocation; 85 86 typedef std::map<std::string, ITexture*> MapTexture; 87 MapTexture mTextures; 88 OpenGL3ImageLoader* mImageLoader; 89 bool mPboIsSupported; 90 91 bool mIsInitialise; 92 }; 93 94 } // namespace MyGUI 95 96 #endif // MYGUI_OPENGL3_RENDER_MANAGER_H_ 97