7
#include "MyGUI_OpenGLRTTexture.h"
8
#include "MyGUI_OpenGLRenderManager.h"
9
#include "MyGUI_OpenGLDiagnostic.h"
16
OpenGLRTTexture::OpenGLRTTexture(unsigned int _texture) :
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);
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);
36
// create a framebuffer object, you need to delete them when program exits.
37
glGenFramebuffersEXT(1, &mFBOID);
38
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
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);
51
// attach a texture to FBO color attachement point
52
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mTextureID, 0);
54
// attach a renderbuffer to depth attachment point
55
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, mRBOID);
57
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
60
OpenGLRTTexture::~OpenGLRTTexture()
64
glDeleteFramebuffersEXT(1, &mFBOID);
69
glDeleteRenderbuffersEXT(1, &mRBOID);
74
void OpenGLRTTexture::begin()
76
glPushAttrib(GL_VIEWPORT_BIT);
78
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
80
glViewport(0, 0, mWidth, mHeight);
82
OpenGLRenderManager::getInstance().begin();
83
glOrtho(-1, 1, 1, -1, -1, 1);
84
glClear(GL_COLOR_BUFFER_BIT/* | GL_DEPTH_BUFFER_BIT*/);
87
void OpenGLRTTexture::end()
89
OpenGLRenderManager::getInstance().end();
91
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // unbind
96
void OpenGLRTTexture::doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count)
98
OpenGLRenderManager::getInstance().doRender(_buffer, _texture, _count);
7
#include "MyGUI_OpenGLRTTexture.h"
8
#include "MyGUI_OpenGLRenderManager.h"
9
#include "MyGUI_OpenGLDiagnostic.h"
16
OpenGLRTTexture::OpenGLRTTexture(unsigned int _texture) :
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);
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);
36
// create a framebuffer object, you need to delete them when program exits.
37
glGenFramebuffersEXT(1, &mFBOID);
38
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
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);
51
// attach a texture to FBO color attachement point
52
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mTextureID, 0);
54
// attach a renderbuffer to depth attachment point
55
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, mRBOID);
57
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
60
OpenGLRTTexture::~OpenGLRTTexture()
64
glDeleteFramebuffersEXT(1, &mFBOID);
69
glDeleteRenderbuffersEXT(1, &mRBOID);
74
void OpenGLRTTexture::begin()
76
glPushAttrib(GL_VIEWPORT_BIT);
78
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBOID);
80
glViewport(0, 0, mWidth, mHeight);
82
OpenGLRenderManager::getInstance().begin();
83
glOrtho(-1, 1, 1, -1, -1, 1);
84
glClear(GL_COLOR_BUFFER_BIT/* | GL_DEPTH_BUFFER_BIT*/);
87
void OpenGLRTTexture::end()
89
OpenGLRenderManager::getInstance().end();
91
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // unbind
96
void OpenGLRTTexture::doRender(IVertexBuffer* _buffer, ITexture* _texture, size_t _count)
98
OpenGLRenderManager::getInstance().doRender(_buffer, _texture, _count);