From 079cf6c090958ef62edb21f6605159666246835b Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 12 Jul 2019 16:09:12 +0100 Subject: [PATCH] Added FrameBufferAttachment::resizeGLObjectBuffers(..) and releaseGLObjects(..) methods --- include/osg/FrameBufferObject | 3 +++ src/osg/FrameBufferObject.cpp | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/osg/FrameBufferObject b/include/osg/FrameBufferObject index 8ca508a37..9bcb8e8ed 100644 --- a/include/osg/FrameBufferObject +++ b/include/osg/FrameBufferObject @@ -304,6 +304,9 @@ class OSG_EXPORT FrameBufferAttachment unsigned int getTexture3DZOffset() const; unsigned int getTextureArrayLayer() const; + void resizeGLObjectBuffers(unsigned int maxSize); + void releaseGLObjects(osg::State* = 0) const; + private: // use the Pimpl idiom to avoid dependency from // all Texture* headers diff --git a/src/osg/FrameBufferObject.cpp b/src/osg/FrameBufferObject.cpp index cb79979ba..c3988e067 100644 --- a/src/osg/FrameBufferObject.cpp +++ b/src/osg/FrameBufferObject.cpp @@ -565,6 +565,18 @@ unsigned int FrameBufferAttachment::getTextureArrayLayer() const return _ximpl->zoffset; } +void FrameBufferAttachment::resizeGLObjectBuffers(unsigned int maxSize) +{ + if (_ximpl->renderbufferTarget.valid()) _ximpl->renderbufferTarget->resizeGLObjectBuffers(maxSize); + if (_ximpl->textureTarget.valid()) _ximpl->textureTarget->resizeGLObjectBuffers(maxSize); +} + +void FrameBufferAttachment::releaseGLObjects(osg::State* state) const +{ + if (_ximpl->renderbufferTarget.valid()) _ximpl->renderbufferTarget->releaseGLObjects(state); + if (_ximpl->textureTarget.valid()) _ximpl->textureTarget->releaseGLObjects(state); +} + /************************************************************************** * FrameBufferObject **************************************************************************/ @@ -594,6 +606,11 @@ void FrameBufferObject::resizeGLObjectBuffers(unsigned int maxSize) _fboID.resize(maxSize); _unsupported.resize(maxSize); _fboID.resize(maxSize); + + for(AttachmentMap::iterator itr = _attachments.begin(); itr != _attachments.end(); ++itr) + { + itr->second.resizeGLObjectBuffers(maxSize); + } } void FrameBufferObject::releaseGLObjects(osg::State* state) const @@ -618,6 +635,11 @@ void FrameBufferObject::releaseGLObjects(osg::State* state) const } } } + + for(AttachmentMap::const_iterator itr = _attachments.begin(); itr != _attachments.end(); ++itr) + { + itr->second.releaseGLObjects(state); + } } void FrameBufferObject::setAttachment(BufferComponent attachment_point, const FrameBufferAttachment &attachment)