Hi Philipp, I'm not sure, if I really understand what you intend to do.
In my case my scene is very complex and I get timeouts on my graphic card. So I do a rendering into many tiles, each holding a small portion of the scene. Thus culling avoids transfer of the complete data onto the graphic card. The tiles are assigned to a quadtree and rendered with paged LOD. Would that also be a solution for you? - Werner - Am 10.12.2019 um 16:42 schrieb Philipp Wagner: > Hi, > > I want to perform an offscreen rendering of a scene that is too large to fit > into the GPU memory at once (lots of big textures). > My idea was to render parts of the scene each in its own frame, and disable > the clearing of the depth and color buffer. > This does work for the color buffer, but the depth buffer seems to be cleared > after each frame, which leads to incorrect results (The later parts are drawn > over the previous > ones, even though they are behind the other parts). > > The algorithm: > 1. Create camera/context/... > 2. Clear the buffers (i.e. Render an empty scene with a clear mask of > (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT) > 3. Disable buffer clearing > 4. Render each part in its own frame > a. Add part to the scene > b. Render > c. Remove part from the scene > 5. Read back color buffer > > > osg::ref_ptr<::osg::Camera> camera = new osg::Camera(); > > //Here we set the camera orientation/projection matrix > > camera->setClearColor(...); > camera->setGraphicsContext(context); > > osg::ref_ptr<osg::Image> img = new osg::Image; > img->allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE); > camera->attach(osg::Camera::COLOR_BUFFER0, img, numSamples); > camera->attach(osg::Camera::DEPTH_BUFFER, GL_DEPTH_COMPONENT32); > camera->setRenderOrder(osg::Camera::PRE_RENDER); > camera->setRenderTargetImplementation(osg::Camera::RenderTargetImplementation::FRAME_BUFFER_OBJECT); > camera->setReferenceFrame(osg::Camera::ABSOLUTE_RF); > camera->setProjectionResizePolicy(osg::Camera::FIXED); > camera->setViewport(0, 0, img->s(), img->t()); > viewer->addSlave(camera); > > camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); > viewer->frame(); > camera->setClearMask(0); > for (auto& item : parts) > { > //Here we create and add the item to the scene... > viewer->frame(); > //Here we remove item from the scene and delete it > } > > Thanks in advance > Phil > -- > You received this message because you are subscribed to the Google Groups > "OpenSceneGraph Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to osg-users+unsubscr...@googlegroups.com > <mailto:osg-users+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/osg-users/c6f7907d-6c89-4c00-973c-f9dc0585ae32%40googlegroups.com > <https://groups.google.com/d/msgid/osg-users/c6f7907d-6c89-4c00-973c-f9dc0585ae32%40googlegroups.com?utm_medium=email&utm_source=footer>. > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org