25 #include "../../common/WPropertyHelper.h"
26 #include "../../common/WItemSelection.h"
28 #include "../shaders/WGEShaderPropertyDefineOptions.h"
29 #include "../callbacks/WGENodeMaskCallback.h"
30 #include "../WGEUtils.h"
32 #include "WGEPostprocessor.h"
34 #include "WGEPostprocessingNode.h"
39 m_properties( boost::shared_ptr<
WProperties >( new
WProperties(
"Post-processing",
"Post-processing properties" ) ) )
45 boost::shared_ptr< WItemSelection > m_possibleSelections = boost::shared_ptr< WItemSelection >(
new WItemSelection() );
46 m_possibleSelections->addItem(
"None",
"No postprocessing." );
48 m_showHud =
m_properties->addProperty(
"Texture Debug",
"If set, all intermediate texture are shown on screen for debugging.",
false );
49 m_active =
m_properties->addProperty(
"Enable",
"If set, post-processing is enabled.",
false,
true );
51 m_possibleSelections->getSelectorFirst(),
61 for( WGEPostprocessor::ProcessorList::const_iterator iter = processors.begin(); iter != processors.end(); ++iter )
64 osg::ref_ptr< WGEOffscreenRenderNode > offscreen(
new WGEOffscreenRenderNode( reference, width, height, noHud ) );
65 offscreen->getTextureHUD()->addUpdateCallback( textureHudCallback );
68 osg::ref_ptr< WGEOffscreenRenderPass > render = offscreen->addGeometryRenderPass(
82 processor->getProperties()->setHidden(
true );
85 m_possibleSelections->addItem( processor->getName(), processor->getDescription() );
88 osg::ref_ptr< WGEOffscreenFinalPass > output = offscreen->addFinalOnScreenPass(
new WGEShader(
"WGEPostprocessorCombiner" ),
90 output->bind( processor->getOutput(), 0 );
93 osg::ref_ptr< osg::Texture2D > depthTex = processor->getDepth();
98 output->bind( depthTex, 1 );
101 addChild( offscreen );
122 m_active,
"WGE_POSTPROCESSING_DISABLED",
"WGE_POSTPROCESSING_ENABLED" )
126 shader->addPreprocessor( preproc );
131 w->get()[ node ] = std::make_pair( shader, preproc );
145 if( item != w->get().end() )
148 ( *item ).second.first->removePreprocessor( ( *item ).second.second );
149 w->get().erase( item );
164 ( *iter ).second.first->removePreprocessor( ( *iter ).second.second );
188 m_postprocs[ i ]->getProperties()->setHidden( i != ( active - 1 ) );