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.
