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