diff --git a/src/ACGL/OpenGL/Objects/Texture.cc b/src/ACGL/OpenGL/Objects/Texture.cc index 8a45fb79d7b5ad0e7ee2b0d2bd522189b45a02e2..5c83eb46439b21edfd1686cc7f0dc0a5ec211740 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);