[osg-users] Render To Image Crash in RenderStage.cpp - trunk

J.P. Delport jpdelport at csir.co.za
Mon Apr 18 00:31:38 PDT 2011


You could use a pbuffer instead of a window. See the osgscreencapture 
example's pbuffer options.

jp

On 16/04/11 00:46, Matthias Asselborn wrote:
> Hi,
>
>
> i want to render a loaded scene into an image.
> i dont want to see any viewer windows.
>
> I have tried to realize it with osg::Viewer, but after the call
> viewer->frame a viewer window poped up.
>
> Now ive tried it with osgUtils::SceneViewer
> but after the draw call - the program crashes
>
> whats wrong?
>
> Code:
>
>
> osg::ref_ptr<osg::Image>  shot = new osg::Image();
> shot->allocateImage( 800, 600, 1, GL_RGB, GL_UNSIGNED_BYTE );
> osg::ref_ptr<osg::Node>  subgraph = m_pNode.get();
> osg::ref_ptr<osg::Camera>  camera = new osg::Camera;
> osg::ref_ptr<osg::Camera>  oldcamera = m_pViewer->getCamera();
>
> //Copy the settings from sceneView-camera to get exactly the view
> //the user sees at the moment:
>
> camera->setClearColor( oldcamera->getClearColor() );
> camera->setClearMask( oldcamera->getClearMask() );
> camera->setColorMask( oldcamera->getColorMask() );
> camera->setTransformOrder( oldcamera->getTransformOrder() );
> camera->setProjectionMatrix( oldcamera->getProjectionMatrix() );
> camera->setViewMatrix( oldcamera->getViewMatrix() );
>
> // set view
> camera->setReferenceFrame( osg::Transform::ABSOLUTE_RF );
>
> // set viewport
> camera->setViewport( 0, 0, 800, 600 );
>
> //set the camera to render before after the main camera.
> camera->setRenderOrder( osg::Camera::POST_RENDER );
>
> // tell the camera to use OpenGL frame buffer object where supported.
> camera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );
>
> camera->attach( osg::Camera::COLOR_BUFFER, shot.get() );
>
> // add subgraph to render
> camera->addChild( subgraph.get() );
> //camera->addChild(TheDocument->GetHUD().get() );
> //Need to mage it part of the scene :
> m_pViewer->setSceneData( camera.get() );
>
> //Make it frame:
>
> m_pViewer->update();
> m_pViewer->cull();
> m_pViewer->draw();
>
> // in draw call the software crashes
>
> osgDB::writeImageFile( *shot, "C:/tools/test.bmp" );
>
>
>
>
>
> The crash appers in
> RenderStage.cpp Line 1146 - trunk
>
>
> Code:
>
>
>      if (_graphicsContext.valid()&&  _graphicsContext != callingContext)
>      {
>          // show we release the context so that others can use it?? will do so right
>          // now as an experiment.
>          callingContext->releaseContext();
>
>
>
>
> Thank you!
>
> Cheers,
> Matthias
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=38516#38516
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>

-- 
This message is subject to the CSIR's copyright terms and conditions, e-mail legal notice, and implemented Open Document Format (ODF) standard. 
The full disclaimer details can be found at http://www.csir.co.za/disclaimer.html.

This message has been scanned for viruses and dangerous content by MailScanner, 
and is believed to be clean.  MailScanner thanks Transtec Computers for their support.




More information about the osg-users mailing list