@ -137,15 +137,11 @@ namespace MWGui
public :
CopyFramebufferToTextureCallback ( osg : : Texture2D * texture )
: mTexture ( texture )
, oneshot ( true )
{
}
void operator ( ) ( osg : : RenderInfo & renderInfo ) const override
{
if ( ! oneshot )
return ;
oneshot = false ;
int w = renderInfo . getCurrentCamera ( ) - > getViewport ( ) - > width ( ) ;
int h = renderInfo . getCurrentCamera ( ) - > getViewport ( ) - > height ( ) ;
mTexture - > copyTexImage2D ( * renderInfo . getState ( ) , 0 , 0 , w , h ) ;
@ -153,7 +149,6 @@ namespace MWGui
private :
osg : : ref_ptr < osg : : Texture2D > mTexture ;
mutable bool oneshot ;
} ;
class DontComputeBoundCallback : public osg : : Node : : ComputeBoundingSphereCallback
@ -322,9 +317,12 @@ namespace MWGui
mGuiTexture . reset ( new osgMyGUI : : OSGTexture ( mTexture ) ) ;
}
// Notice that the next time this is called, the current CopyFramebufferToTextureCallback will be deleted
// so there's no memory leak as at most one object of type CopyFramebufferToTextureCallback is allocated at a time.
mViewer - > getCamera ( ) - > setInitialDrawCallback ( new CopyFramebufferToTextureCallback ( mTexture ) ) ;
if ( ! mCopyFramebufferToTextureCallback )
{
mCopyFramebufferToTextureCallback = new CopyFramebufferToTextureCallback ( mTexture ) ;
}
mViewer - > getCamera ( ) - > addInitialDrawCallback ( mCopyFramebufferToTextureCallback ) ;
mBackgroundImage - > setBackgroundImage ( " " ) ;
mBackgroundImage - > setVisible ( false ) ;
@ -367,6 +365,9 @@ namespace MWGui
mViewer - > renderingTraversals ( ) ;
mViewer - > advance ( mViewer - > getFrameStamp ( ) - > getSimulationTime ( ) ) ;
if ( mCopyFramebufferToTextureCallback )
mViewer - > getCamera ( ) - > removeInitialDrawCallback ( mCopyFramebufferToTextureCallback ) ;
mLastRenderTime = mTimer . time_m ( ) ;
}