From 2274758726d1138a2b65535244e84225c3de5304 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 11 Aug 2012 17:49:09 +0300 Subject: Move fbo code to GraphicsManager from opengl backends. --- src/safeopenglgraphics.cpp | 64 +++++----------------------------------------- 1 file changed, 6 insertions(+), 58 deletions(-) (limited to 'src/safeopenglgraphics.cpp') diff --git a/src/safeopenglgraphics.cpp b/src/safeopenglgraphics.cpp index 055a996d1..adc49795c 100644 --- a/src/safeopenglgraphics.cpp +++ b/src/safeopenglgraphics.cpp @@ -26,6 +26,7 @@ #include "safeopenglgraphics.h" #include "configuration.h" +#include "graphicsmanager.h" #include "graphicsvertexes.h" #include "logger.h" @@ -44,8 +45,9 @@ GLuint SafeOpenGLGraphics::mLastImage = 0; SafeOpenGLGraphics::SafeOpenGLGraphics(): - mAlpha(false), mTexture(false), mColorAlpha(false), - mFboId(0), mTextureId(0), mRboId(0) + mAlpha(false), + mTexture(false), + mColorAlpha(false) { mOpenGL = 2; mName = "safe OpenGL"; @@ -425,43 +427,7 @@ void SafeOpenGLGraphics::prepareScreenshot() { #if !defined(_WIN32) if (config.getBoolValue("usefbo")) - { - int h = mTarget->h; - int w = mTarget->w; - - // create a texture object - glGenTextures(1, &mTextureId); - glBindTexture(GL_TEXTURE_2D, mTextureId); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, - GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - glBindTexture(GL_TEXTURE_2D, 0); - - // create a renderbuffer object to store depth info - glGenRenderbuffersEXT(1, &mRboId); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mRboId); - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, - GL_DEPTH_COMPONENT, w, h); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); - - // create a framebuffer object - glGenFramebuffersEXT(1, &mFboId); - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFboId); - - // attach the texture to FBO color attachment point - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, - GL_TEXTURE_2D, mTextureId, 0); - - // attach the renderbuffer to depth attachment point - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, - GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, mRboId); - - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFboId); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } + graphicsManager.createFBO(mTarget->w, mTarget->h, &mFbo); #endif } @@ -507,25 +473,7 @@ SDL_Surface* SafeOpenGLGraphics::getScreenshot() #if !defined(_WIN32) if (config.getBoolValue("usefbo")) - { - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - if (mFboId) - { - glDeleteFramebuffersEXT(1, &mFboId); - mFboId = 0; - } - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); - if (mRboId) - { - glDeleteRenderbuffersEXT(1, &mRboId); - mRboId = 0; - } - if (mTextureId) - { - glDeleteTextures(1, &mTextureId); - mTextureId = 0; - } - } + graphicsManager.deleteFBO(&mFbo); #endif glPixelStorei(GL_PACK_ALIGNMENT, pack); -- cgit v1.2.3-60-g2f50