diff options
Diffstat (limited to 'src/safeopenglgraphics.cpp')
-rw-r--r-- | src/safeopenglgraphics.cpp | 64 |
1 files changed, 6 insertions, 58 deletions
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); |