~ubuntu-branches/ubuntu/vivid/mygui/vivid

« back to all changes in this revision

Viewing changes to Platforms/OpenGL/OpenGLPlatform/src/MyGUI_OpenGLRTTexture.cpp

  • Committer: Package Import Robot
  • Author(s): Scott Howard, Bret Curtis, Scott Howard
  • Date: 2014-09-18 17:57:48 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20140918175748-dd8va78mvpw1jbes
Tags: 3.2.1-1
[ Bret Curtis ]
* Updated license for majority of files from LGPL to Expat (MIT)

[ Scott Howard ]
* New upstream release
* Updated patch to add build option for system GLEW libraries
* All patches accepted upstream except shared_libraries.patch
* Bumped SONAME due to dropped symbols, updated *.symbols and package
  names
* Updated license of debian/* to Expat with permission of all authors
* Don't install Doxygen autogenerated md5 and map files (thanks
  lintian)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*!
2
 
        @file
3
 
        @author         Albert Semenov
4
 
        @date           12/2009
5
 
*/
6
 
 
7
 
#include "MyGUI_OpenGLRTTexture.h"
8
 
#include "MyGUI_OpenGLRenderManager.h"
9
 
#include "MyGUI_OpenGLDiagnostic.h"
10
 
 
11
 
#include "GL/glew.h"
12
 
 
13
 
namespace MyGUI
14
 
{
15
 
 
16
 
        OpenGLRTTexture::OpenGLRTTexture(unsigned int _texture) :
17
 
                mTextureID(_texture),
18
 
                mWidth(0),
19
 
                mHeight(0),
20
 
                mFBOID(0),
21
 
                mRBOID(0)
22
 
        {
23
 
                int miplevel = 0;
24
 
                glBindTexture(GL_TEXTURE_2D, mTextureID);
25
 
                glGetTexLevelParameteriv(GL_TEXTURE_2D, miplevel, GL_TEXTURE_WIDTH, &mWidth);
26
 
                glGetTexLevelParameteriv(GL_TEXTURE_2D, miplevel, GL_TEXTURE_HEIGHT, &mHeight);
27
 
                glBindTexture(GL_TEXTURE_2D, 0);
28
 
 
29
 
                mRenderTargetInfo.maximumDepth = 1.0f;
30
 
                mRenderTargetInfo.hOffset = 0;
31
 
                mRenderTargetInfo.vOffset = 0;
32
 
                mRenderTargetInfo.aspectCoef = float(mHeight) / float(mWidth);
33
 
                mRenderTargetInfo.pixScaleX = 1.0f / float(mWidth);
34
 
                mRenderTargetInfo.pixScaleY = 1.0f / float(mHeight);
35
 
 
36
 
                // create a framebuffer object, you need to delete them when program exits.
37
 
                glGenFramebuffersEXT(1, &mFBOID);
38
 
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
39
 
 
40
 
                // create a renderbuffer object to store depth info
41
 
                // NOTE: A depth renderable image should be attached the FBO for depth test.
42
 
                // If we don't attach a depth renderable image to the FBO, then
43
 
                // the rendering output will be corrupted because of missing depth test.
44
 
                // If you also need stencil test for your rendering, then you must
45
 
                // attach additional image to the stencil attachement point, too.
46
 
                glGenRenderbuffersEXT(1, &mRBOID);
47
 
                glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mRBOID);
48
 
                glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, mWidth, mHeight);
49
 
                glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
50
 
 
51
 
                // attach a texture to FBO color attachement point
52
 
                glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mTextureID, 0);
53
 
 
54
 
                // attach a renderbuffer to depth attachment point
55
 
                glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, mRBOID);
56
 
 
57
 
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
58
 
        }
59
 
 
60
 
        OpenGLRTTexture::~OpenGLRTTexture()
61
 
        {
62
 
                if (mFBOID != 0)
63
 
                {
64
 
                        glDeleteFramebuffersEXT(1, &mFBOID);
65
 
                        mFBOID = 0;
66
 
                }
67
 
                if (mRBOID != 0)
68
 
                {
69
 
                        glDeleteRenderbuffersEXT(1, &mRBOID);
70
 
                        mRBOID = 0;
71
 
                }
72
 
        }
73
 
 
74
 
        void OpenGLRTTexture::begin()
75
 
        {
76
 
                glPushAttrib(GL_VIEWPORT_BIT);
77
 
 
78
 
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
79
 
 
80
 
                glViewport(0, 0, mWidth, mHeight);
81
 
 
82
 
                OpenGLRenderManager::getInstance().begin();
83
 
                glOrtho(-1, 1, 1, -1, -1, 1);
84
 
                glClear(GL_COLOR_BUFFER_BIT/* | GL_DEPTH_BUFFER_BIT*/);
85
 
        }
86
 
 
87
 
        void OpenGLRTTexture::end()
88
 
        {
89
 
                OpenGLRenderManager::getInstance().end();
90
 
 
91
 
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // unbind
92
 
 
93
 
                glPopAttrib();
94
 
        }
95
 
 
96
 
        void OpenGLRTTexture::doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count)
97
 
        {
98
 
                OpenGLRenderManager::getInstance().doRender(_buffer, _texture, _count);
99
 
        }
100
 
 
101
 
} // namespace MyGUI
 
1
/*!
 
2
        @file
 
3
        @author         Albert Semenov
 
4
        @date           12/2009
 
5
*/
 
6
 
 
7
#include "MyGUI_OpenGLRTTexture.h"
 
8
#include "MyGUI_OpenGLRenderManager.h"
 
9
#include "MyGUI_OpenGLDiagnostic.h"
 
10
 
 
11
#include "GL/glew.h"
 
12
 
 
13
namespace MyGUI
 
14
{
 
15
 
 
16
        OpenGLRTTexture::OpenGLRTTexture(unsigned int _texture) :
 
17
                mTextureID(_texture),
 
18
                mWidth(0),
 
19
                mHeight(0),
 
20
                mFBOID(0),
 
21
                mRBOID(0)
 
22
        {
 
23
                int miplevel = 0;
 
24
                glBindTexture(GL_TEXTURE_2D, mTextureID);
 
25
                glGetTexLevelParameteriv(GL_TEXTURE_2D, miplevel, GL_TEXTURE_WIDTH, &mWidth);
 
26
                glGetTexLevelParameteriv(GL_TEXTURE_2D, miplevel, GL_TEXTURE_HEIGHT, &mHeight);
 
27
                glBindTexture(GL_TEXTURE_2D, 0);
 
28
 
 
29
                mRenderTargetInfo.maximumDepth = 1.0f;
 
30
                mRenderTargetInfo.hOffset = 0;
 
31
                mRenderTargetInfo.vOffset = 0;
 
32
                mRenderTargetInfo.aspectCoef = float(mHeight) / float(mWidth);
 
33
                mRenderTargetInfo.pixScaleX = 1.0f / float(mWidth);
 
34
                mRenderTargetInfo.pixScaleY = 1.0f / float(mHeight);
 
35
 
 
36
                // create a framebuffer object, you need to delete them when program exits.
 
37
                glGenFramebuffersEXT(1, &mFBOID);
 
38
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
 
39
 
 
40
                // create a renderbuffer object to store depth info
 
41
                // NOTE: A depth renderable image should be attached the FBO for depth test.
 
42
                // If we don't attach a depth renderable image to the FBO, then
 
43
                // the rendering output will be corrupted because of missing depth test.
 
44
                // If you also need stencil test for your rendering, then you must
 
45
                // attach additional image to the stencil attachement point, too.
 
46
                glGenRenderbuffersEXT(1, &mRBOID);
 
47
                glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mRBOID);
 
48
                glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, mWidth, mHeight);
 
49
                glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
 
50
 
 
51
                // attach a texture to FBO color attachement point
 
52
                glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mTextureID, 0);
 
53
 
 
54
                // attach a renderbuffer to depth attachment point
 
55
                glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, mRBOID);
 
56
 
 
57
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 
58
        }
 
59
 
 
60
        OpenGLRTTexture::~OpenGLRTTexture()
 
61
        {
 
62
                if (mFBOID != 0)
 
63
                {
 
64
                        glDeleteFramebuffersEXT(1, &mFBOID);
 
65
                        mFBOID = 0;
 
66
                }
 
67
                if (mRBOID != 0)
 
68
                {
 
69
                        glDeleteRenderbuffersEXT(1, &mRBOID);
 
70
                        mRBOID = 0;
 
71
                }
 
72
        }
 
73
 
 
74
        void OpenGLRTTexture::begin()
 
75
        {
 
76
                glPushAttrib(GL_VIEWPORT_BIT);
 
77
 
 
78
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
 
79
 
 
80
                glViewport(0, 0, mWidth, mHeight);
 
81
 
 
82
                OpenGLRenderManager::getInstance().begin();
 
83
                glOrtho(-1, 1, 1, -1, -1, 1);
 
84
                glClear(GL_COLOR_BUFFER_BIT/* | GL_DEPTH_BUFFER_BIT*/);
 
85
        }
 
86
 
 
87
        void OpenGLRTTexture::end()
 
88
        {
 
89
                OpenGLRenderManager::getInstance().end();
 
90
 
 
91
                glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // unbind
 
92
 
 
93
                glPopAttrib();
 
94
        }
 
95
 
 
96
        void OpenGLRTTexture::doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count)
 
97
        {
 
98
                OpenGLRenderManager::getInstance().doRender(_buffer, _texture, _count);
 
99
        }
 
100
 
 
101
} // namespace MyGUI