Hi Allen, One reasonably simple technique would be to handle this in the shader itself. Keep a Flag in the shader. If the Flag is set, perform convolution to compute the O/P pixel color. Otherwise simply set the output pixel color from the Incoming texture pixel.
Another Way: The One you are using Keep a UnitInOut parallel to your blurring channel. In the shader for his unit, just pass the Input to the output. Connect the O/P of both to the UnitOut. Enable node mask of the preferred channel as per requirement. Regards Harash ________________________________ From: Allen Saucier <[email protected]> To: [email protected] Sent: Fri, April 9, 2010 12:46:43 AM Subject: [osg-users] [osgPPU] dynamic of the pipeline Hi, does anyone know if it is possible to setup a pipeline such that I may turn on and turn off a blurring effect during runtime? For example: camera->setViewport(new osg::Viewport(0,0,windowWidth,windowHeight)); camera->attach(osg::Camera::COLOR_BUFFER0, textureView); camera->setRenderTargetImplementation(renderImplementation); // setup osgPPU pipeline processor, which will use the main camera osg::ref_ptr<osgPPU::Processor> processor = new osgPPU::Processor(); p_ppuProcessor = processor; processor->setCamera(camera); // setup unit which will bring the output of the MAIN camera, // w/in the Processor unit into the pipeline osgPPU::UnitCameraAttachmentBypass* ucaByPass = new osgPPU::UnitCameraAttachmentBypass(); ucaByPass->setBufferComponent(osg::Camera::COLOR_BUFFER0); ucaByPass->setName("mainCamOutputTexUCAB"); processor->addChild(ucaByPass); // bypass With Blurring // osgPPU::UnitBypass* bypassWithBlurring = new osgPPU::UnitBypass(); bypassWithBlurring->setName("BypassWBlurring"); ucaByPass->addChild(bypassWithBlurring); // bypass withOUT blurring osgPPU::UnitBypass* bypassWOBlurring = new osgPPU::UnitBypass(); bypassWOBlurring->setName("BypassWOBlurring"); ucaByPass->addChild(bypassWOBlurring); .... blurring ppu code... .... osgPPU::UnitOut* unitOut2= new osgPPU::UnitOut(); osgPPU::ShaderAttribute* shaderAttribute= new osgPPU::ShaderAttribute(); { osg::Shader* shader= new osg::Shader(osg::Shader::FRAGMENT); const char* shaderSource= "uniform sampler2D textureNameInShader;\n" "void main()\n" "{\n" " gl_FragColor=texture2D(textureNameInShader,gl_TexCoord[0].st);\n" "}"; shader->setShaderSource(shaderSource); shaderAttribute->addShader(shader); shaderAttribute->setName("nomShaderAttribute"); shaderAttribute->add("textureNameInShader", osg::Uniform::SAMPLER_2D); shaderAttribute->set("textureNameInShader", 0); unitOut2->setName("finalOutputUnit"); unitOut2->setViewport(new osg::Viewport(0,0, windowWidth, windowHeight) ); unitOut2->getOrCreateStateSet()->setAttributeAndModes(shaderAttribute); } //exp 1 for blurring whole scene; bypassWithBlurring->addChild(blurx); blurx->addChild(blury); blury->addChild(unitOut2); bypassWOBlurring->addChild(unitOut2); How may I turn on and off my blur effect during runtime? I have tried using setActive but unfortunately, it only appears to work - within my pipeline - when applied to the last ppu, blury, and I get a black screen. Using removeChild() in any situation causes a runtime crash. I am not sure if removing a unit from processor is the right path to go either, because my units are children of other units and that would force me to re-construct my whole pipeline dynamically during runtime. I can do that but it is more work. Any help would be appreciated. Thank you! Cheers, Allen ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=26595#26595 _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

