30 #include "../common/WLogger.h"
31 #include "../common/WStringUtils.h"
33 #include "WGETextureUtils.h"
34 #include "exceptions/WGESignalSubscriptionFailed.h"
36 #include "WGEColormapping.h"
47 void setDefines( osg::ref_ptr< WGEShader > shader,
size_t start = 0 )
68 void setPreTransform( osg::ref_ptr< WGEShader > shader, osg::Matrixd preTransform )
70 std::ostringstream out;
72 const osg::Matrixd::value_type* m = preTransform.ptr();
75 out.setf( std::ios::fixed, std::ios::floatfield );
78 for(
size_t i = 0; i < 15; ++i )
80 out << m[ i ] <<
", ";
82 out << m[ 15 ] <<
" )";
85 shader->setDefine(
"ColormapPreTransform", out.str() );
92 m_boundingBox.getWriteTicket()->get().set( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 );
116 size_t startTexUnit )
118 instance()->applyInst(
NodeList( 1, node ), preTransform, shader, startTexUnit );
123 instance()->applyInst( nodes, preTransform, shader, startTexUnit );
133 instance()->registerTextureInst( texture, name );
138 instance()->deregisterTextureInst( texture );
143 instance()->replaceTextureInst( old, newTex, name );
147 size_t startTexUnit )
150 osg::ref_ptr< WGEShader > s = shader;
154 s =
new WGEShader(
"WGEDefaultColormapper" );
156 setDefines( s, startTexUnit );
157 setPreTransform( s, preTransform );
160 for( NodeList::const_iterator i = nodes.begin(); i != nodes.end(); ++i )
178 wlog::debug(
"WGEColormapping" ) <<
"Registering texture.";
183 texture->name()->set( name );
193 wlog::debug(
"WGEColormapping" ) <<
"De-registering texture.";
204 wlog::debug(
"WGEColormapping" ) <<
"Replacing texture.";
207 newTex->name()->set( name );
233 bbw->get() = ( *iter )->getBoundingBox();
238 bbw->get().expandBy( ( *iter )->getBoundingBox() );
253 iter->second->m_rebind =
true;
262 if( infoItem == r->get().end() )
283 ( unit < maxTexUnits ) && ( iter != rt->get().end() );
300 if( iter == w->get().end() )
306 if( iter + 1 == w->get().end() )
312 std::iter_swap( iter, iter + 1 );
327 if( iter == w->get().end() )
333 if( iter == w->get().begin() )
339 std::iter_swap( iter, iter - 1 );