1 /*********************************************************************** 2 created: Wed, 8th Feb 2012 3 author: Lukas E Meindl (based on code by Paul D Turner) 4 *************************************************************************/ 5 /*************************************************************************** 6 * Copyright (C) 2004 - 2012 Paul D Turner & The CEGUI Development Team 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining 9 * a copy of this software and associated documentation files (the 10 * "Software"), to deal in the Software without restriction, including 11 * without limitation the rights to use, copy, modify, merge, publish, 12 * distribute, sublicense, and/or sell copies of the Software, and to 13 * permit persons to whom the Software is furnished to do so, subject to 14 * the following conditions: 15 * 16 * The above copyright notice and this permission notice shall be 17 * included in all copies or substantial portions of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 22 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 * OTHER DEALINGS IN THE SOFTWARE. 26 ***************************************************************************/ 27 #ifndef _CEGUIOpenGL3FBOTextureTarget_h_ 28 #define _CEGUIOpenGL3FBOTextureTarget_h_ 29 30 #include "CEGUI/RendererModules/OpenGL/TextureTarget.h" 31 #include "CEGUI/RendererModules/OpenGL/GL.h" 32 #include "../../Rect.h" 33 34 35 #if defined(_MSC_VER) 36 # pragma warning(push) 37 # pragma warning(disable : 4250) 38 #endif 39 40 // Start of CEGUI namespace section 41 namespace CEGUI 42 { 43 class OpenGL3Texture; 44 class OpenGL3Renderer; 45 46 //! ~OpenGL3FBOTextureTarget - allows rendering to an OpenGL texture via FBO. 47 class OPENGL_GUIRENDERER_API OpenGL3FBOTextureTarget : public OpenGLTextureTarget 48 { 49 public: 50 OpenGL3FBOTextureTarget(OpenGL3Renderer& owner); 51 virtual ~OpenGL3FBOTextureTarget(); 52 53 // overrides from OpenGL3RenderTarget 54 void activate(); 55 void deactivate(); 56 // implementation of TextureTarget interface 57 void clear(); 58 void declareRenderSize(const Sizef& sz); 59 // specialise functions from OpenGL3TextureTarget 60 void grabTexture(); 61 void restoreTexture(); 62 63 protected: 64 //! default size of created texture objects 65 static const float DEFAULT_SIZE; 66 67 //! allocate and set up the texture used with the FBO. 68 void initialiseRenderTexture(); 69 //! resize the texture 70 void resizeRenderTexture(); 71 //! Checks for OpenGL framebuffer completeness 72 void checkFramebufferStatus(); 73 74 //! Frame buffer object. 75 GLuint d_frameBuffer; 76 //! Frame buffer object that was bound before we bound this one 77 GLuint d_previousFrameBuffer; 78 }; 79 80 } // End of CEGUI namespace section 81 82 #if defined(_MSC_VER) 83 # pragma warning(pop) 84 #endif 85 86 #endif // end of guard _CEGUIOpenGLFBOTextureTarget_h_ 87