Thanks Glenn. How this will work with setting the render target implementation to the main view camera? I am trying to avoid multiple cameras and I am not sure this is doable
On Tue, Mar 30, 2021, 15:07 Glenn Waldron <[email protected]> wrote: > Nick, > Pretty sure you can only attach one texture to a FRAME_BUFFER render > target. And in that case, it is just copying the framebuffer to your > texture after rendering it. Consider using a FRAME_BUFFER_OBJECT instead. > > On Monday, March 29, 2021 at 10:45:27 PM UTC-4 [email protected] > wrote: > >> Nonone on this? Robert? >> >> Thank you >> Nick >> >> On Sun, Mar 28, 2021 at 5:24 PM Trajce Nikolov NICK < >> [email protected]> wrote: >> >>> Attached is the minimal code that reproduce the problem >>> >>> Thanks a bunch as always! >>> >>> Nick >>> >>> On Sun, Mar 28, 2021 at 2:49 PM Trajce Nikolov NICK < >>> [email protected]> wrote: >>> >>>> Hi Community, >>>> >>>> I am attaching to the main camera DepthBuffer and ColorBuffer as >>>> Texture2D - attached is the setup. I also have shader to check the depth >>>> buffer - so it is ok as on the image. And I am displaying it on a quad. The >>>> depth buffer is still getting me zeros when the colorbuffer is attached, >>>> otherwise when it is not, then it works as it should. >>>> >>>> Any hints? >>>> >>>> mOsgExternalDepth = new osg::Texture2D; >>>> mOsgExternalDepth->setSourceFormat(GL_DEPTH_COMPONENT); >>>> mOsgExternalDepth->setSourceType(GL_FLOAT); >>>> mOsgExternalDepth->setInternalFormat(GL_DEPTH_COMPONENT32F); >>>> mOsgExternalDepth->setTextureWidth(screenWidth); >>>> mOsgExternalDepth->setTextureHeight(screenHeight); >>>> mOsgExternalDepth->setResizeNonPowerOfTwoHint(false);\ >>>> >>>> mOsgExternalColor = new osg::Texture2D; >>>> mOsgExternalColor->setInternalFormat(GL_RGBA16F_ARB); >>>> mOsgExternalColor->setSourceFormat(GL_RGBA); >>>> mOsgExternalColor->setSourceType(GL_FLOAT); >>>> mOsgExternalColor->setTextureWidth(screenWidth); >>>> mOsgExternalColor->setTextureHeight(screenHeight); >>>> mOsgExternalColor->setResizeNonPowerOfTwoHint(false); >>>> >>>> mainCamera->attach(osg::Camera::COLOR_BUFFER, >>>> (osg::Texture*)mOsgExternalColor); >>>> mainCamera->attach(osg::Camera::DEPTH_BUFFER, >>>> (osg::Texture*)mOsgExternalDepth); >>>> >>>> osg::ref_ptr<osg::Camera> camera = new osg::Camera; >>>> camera->setProjectionMatrix(osg::Matrixd::ortho2D(0, screenWidth, 0, >>>> screenHeight)); >>>> camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); >>>> camera->setViewMatrix(osg::Matrixd::identity()); >>>> camera->setClearMask(0); >>>> camera->setRenderOrder(osg::Camera::POST_RENDER); >>>> camera->setAllowEventFocus(false); >>>> >>>> >>>> context.getImageGenerator()->getViewer()->getView(0)->getSceneData()->asGroup()->addChild(camera); >>>> >>>> osg::ref_ptr<osg::Geometry> quad = >>>> osg::createTexturedQuadGeometry(osg::Vec3(0, 0, 0), >>>> osg::Vec3(screenWidth/2, 0, 0), osg::Vec3(0, screenHeight/2, 0)); >>>> quad->getOrCreateStateSet()->setMode(GL_LIGHTING, >>>> osg::StateAttribute::OFF); >>>> quad->getOrCreateStateSet()->setTextureAttributeAndModes(0, >>>> mOsgExternalDepth); >>>> >>>> const std::string vertShader = ""\ >>>> "void main() "\ >>>> "{ "\ >>>> " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; "\ >>>> " gl_TexCoord[0] = gl_TextureMatrix[0] *gl_MultiTexCoord0;"\ >>>> "}"; >>>> >>>> const std::string fragShader = ""\ >>>> "uniform sampler2D texture0; "\ >>>> "void main() "\ >>>> "{ "\ >>>> " float d = texture2D( texture0, gl_TexCoord[0].xy ).x; "\ >>>> " gl_FragColor = vec4(d, d, d, 1); "\ >>>> "}"; >>>> >>>> osg::ref_ptr<osg::Shader> vert = new osg::Shader(osg::Shader::VERTEX, >>>> vertShader); >>>> osg::ref_ptr<osg::Shader> frag = new osg::Shader(osg::Shader::FRAGMENT, >>>> fragShader); >>>> >>>> osg::ref_ptr<osg::Program> program = new osg::Program; >>>> program->addShader(vert); >>>> program->addShader(frag); >>>> >>>> quad->getOrCreateStateSet()->setAttributeAndModes(program); >>>> quad->getOrCreateStateSet()->addUniform(new >>>> osg::Uniform(osg::Uniform::SAMPLER_2D, "texture0", 0)); >>>> osg::ref_ptr<osg::Geometry> quadColor = >>>> osg::createTexturedQuadGeometry(osg::Vec3(screenWidth / 2, 0, 0), >>>> osg::Vec3(screenWidth/2 , 0, 0), osg::Vec3(0, screenHeight/2, 0)); >>>> quadColor->getOrCreateStateSet()->setMode(GL_LIGHTING, >>>> osg::StateAttribute::OFF); >>>> quadColor->getOrCreateStateSet()->setTextureAttributeAndModes(0, >>>> mOsgExternalColor); >>>> >>>> camera->addChild(quadColor); >>>> camera->addChild(quad); >>>> >>>> -- >>>> trajce nikolov nick >>>> >>> >>> >>> -- >>> trajce nikolov nick >>> >> >> >> -- >> trajce nikolov nick >> > -- > 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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/osg-users/64c1877d-50c2-4fad-801d-41cd63529376n%40googlegroups.com > <https://groups.google.com/d/msgid/osg-users/64c1877d-50c2-4fad-801d-41cd63529376n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/CAO-%2BzikMyHVDy9V9k86%2BiJbyTpn-aJ%2B0miBsMAm6sVh-8hAuHg%40mail.gmail.com.
