From f02e34978542606b9d642d31ecb9f68662c33778 Mon Sep 17 00:00:00 2001 From: Janis Born Date: Thu, 26 Apr 2012 12:00:35 +0200 Subject: [PATCH] remember and restore previoulsy bound texture state in Texture::getImageData --- src/ACGL/OpenGL/Objects/Texture.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/ACGL/OpenGL/Objects/Texture.cc b/src/ACGL/OpenGL/Objects/Texture.cc index 8a45fb7..5c83eb4 100644 --- a/src/ACGL/OpenGL/Objects/Texture.cc +++ b/src/ACGL/OpenGL/Objects/Texture.cc @@ -79,6 +79,17 @@ SharedTextureData Texture::getImageData(GLint _lod, GLenum _type) const { if(_type == GL_INVALID_ENUM) _type = mType; + // remember the previously bound texture + GLint prevTexture; + if (mTarget == GL_TEXTURE_1D) glGetIntegerv(GL_TEXTURE_BINDING_1D, &prevTexture); + else if(mTarget == GL_TEXTURE_2D) glGetIntegerv(GL_TEXTURE_BINDING_2D, &prevTexture); + else if(mTarget == GL_TEXTURE_3D) glGetIntegerv(GL_TEXTURE_BINDING_3D, &prevTexture); + else if(mTarget == GL_TEXTURE_1D_ARRAY) glGetIntegerv(GL_TEXTURE_BINDING_1D_ARRAY, &prevTexture); + else if(mTarget == GL_TEXTURE_2D_ARRAY) glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY, &prevTexture); + else if(mTarget == GL_TEXTURE_RECTANGLE) glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE, &prevTexture); + else if(mTarget == GL_TEXTURE_2D_MULTISAMPLE) glGetIntegerv(GL_TEXTURE_BINDING_2D_MULTISAMPLE, &prevTexture); + else if(mTarget == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) glGetIntegerv(GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY, &prevTexture); + // determine the required buffer size to hold the requested LOD level bind(); GLint width, height, depth; @@ -93,6 +104,9 @@ SharedTextureData Texture::getImageData(GLint _lod, GLenum _type) const GLubyte* imageData = new GLubyte[width * height * getGLTypeSize(_type) * channels]; glGetTexImage(mTarget, _lod, GL_RGB, _type, (GLvoid*)imageData); + // revert to the previously bound texture + glBindTexture(mTarget, prevTexture); + // store the image data and meta information in a TextureData object SharedTextureData dataObject = SharedTextureData(new TextureData()); dataObject->setWidth(width); -- GitLab