Actually it worked after rethinking it. Thanks Glenn On Tue, Mar 30, 2021, 17:10 Trajce Nikolov NICK < [email protected]> wrote:
> 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-%2BzinCoWyd%3DbsbupGW4qRGWpmXxct9EU%3DK%2B%3DU1TU2s7UFJMw%40mail.gmail.com.
