From c5933dde93f8d9e465fcce033df0ee7480edaaac Mon Sep 17 00:00:00 2001 From: Giser <65968233+newpeople123@users.noreply.github.com> Date: Thu, 27 Mar 2025 11:37:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=80=BE=E6=96=9C=E6=91=84?= =?UTF-8?q?=E5=BD=B1=E6=95=B0=E6=8D=AE=E9=A1=B6=E5=B1=82=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E6=97=B6=E4=BC=9A=E4=B8=8D=E6=96=AD=E5=87=BA=E7=8E=B0=E9=97=AA?= =?UTF-8?q?=E7=83=81=E7=9A=84=E9=BB=91=E7=AA=97=E5=8F=A3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline/Utilities.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pipeline/Utilities.cpp b/pipeline/Utilities.cpp index 7d0f343..38bbdfe 100644 --- a/pipeline/Utilities.cpp +++ b/pipeline/Utilities.cpp @@ -90,6 +90,20 @@ static osg::Camera* createImageCamera(osg::Image* image, const osg::BoundingBox& return camera.release(); } +static void setupOffscreenCamera(osg::Camera* camera, osg::Image* image) +{ + camera->setViewport(0, 0, image->s(), image->t()); + osg::ref_ptr traits = new osg::GraphicsContext::Traits; + traits->x = 0; + traits->y = 0; + traits->width = image->s(); + traits->height = image->t(); + traits->doubleBuffer = false; + traits->pbuffer = true; + osg::ref_ptr gc = osg::GraphicsContext::createGraphicsContext(traits.get()); + camera->setGraphicsContext(gc); +} + class MyReadFileCallback : public osgDB::ReadFileCallback { public: @@ -699,6 +713,7 @@ namespace osgVerse osg::ref_ptr camera = createImageCamera(image.get(), bbox); osg::ref_ptr viewer = dynamic_cast(userViewer); if (!viewer) viewer = new osgViewer::Viewer; + setupOffscreenCamera(viewer->getCamera(), image); viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded); viewer->getCamera()->setClearColor(osg::Vec4(0.0f, 0.0f, 0.0f, 0.0f)); { @@ -760,6 +775,7 @@ namespace osgVerse osg::ref_ptr camera = createImageCamera(image.get(), bbox); osg::ref_ptr viewer = dynamic_cast(userViewer); if (!viewer) viewer = new osgViewer::Viewer; + setupOffscreenCamera(viewer->getCamera(), image); viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded); viewer->getCamera()->setClearColor(osg::Vec4(0.0f, 0.0f, 0.0f, 0.0f)); { @@ -793,6 +809,7 @@ namespace osgVerse osg::ref_ptr root = new osg::Group; root->addChild(camera.get()); camera->addChild(node); + viewer->setSceneData(root.get()); HostTextureReserver reserver; root->accept(reserver); reserver.set(true); -- Gitee