30 #include "../common/WLogger.h"
31 #include "WGETextureUtils.h"
32 #include "exceptions/WGESignalSubscriptionFailed.h"
34 #include "WGEColormapping.h"
45 void setDefines( osg::ref_ptr< WGEShader > shader,
size_t start = 0 )
53 shader->setDefine(
"Colormap" + boost::lexical_cast< std::string >( unit ) +
"Enabled",
true );
54 shader->setDefine(
"Colormap" + boost::lexical_cast< std::string >( unit ) +
"Unit", start + unit );
66 void setPreTransform( osg::ref_ptr< WGEShader > shader, osg::Matrixd preTransform )
68 std::ostringstream out;
70 const osg::Matrixd::value_type* m = preTransform.ptr();
73 out.setf( std::ios::fixed, std::ios::floatfield );
76 for(
size_t i = 0; i < 15; ++i )
78 out << m[ i ] <<
", ";
80 out << m[ 15 ] <<
" )";
83 shader->setDefine(
"ColormapPreTransform", out.str() );
115 size_t startTexUnit )
117 instance()->applyInst(
NodeList( 1, node ), preTransform, shader, startTexUnit );
122 instance()->applyInst( nodes, preTransform, shader, startTexUnit );
132 instance()->registerTextureInst( texture, name );
137 instance()->deregisterTextureInst( texture );
142 instance()->replaceTextureInst( old, newTex, name );
146 size_t startTexUnit )
149 osg::ref_ptr< WGEShader > s = shader;
153 s =
new WGEShader(
"WGEDefaultColormapper" );
155 setDefines( s, startTexUnit );
156 setPreTransform( s, preTransform );
159 for( NodeList::const_iterator i = nodes.begin(); i != nodes.end(); ++i )
177 wlog::debug(
"WGEColormapping" ) <<
"Registering texture.";
182 texture->name()->set( name );
192 wlog::debug(
"WGEColormapping" ) <<
"De-registering texture.";
203 wlog::debug(
"WGEColormapping" ) <<
"Replacing texture.";
206 newTex->name()->set( name );
232 bbw->get() = ( *iter )->getBoundingBox();
237 bbw->get().expandBy( ( *iter )->getBoundingBox() );
252 iter->second->m_rebind =
true;
261 if( infoItem == r->get().end() )
282 ( unit < maxTexUnits ) && ( iter != rt->get().end() );
299 if( iter == w->get().end() )
305 if( iter + 1 == w->get().end() )
311 std::iter_swap( iter, iter + 1 );
326 if( iter == w->get().end() )
332 if( iter == w->get().begin() )
338 std::iter_swap( iter, iter - 1 );