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 \"" << name <<
"\".";
183 texture->name()->set( name );
193 wlog::debug(
"WGEColormapping" ) <<
"De-registering texture \"" << texture->name()->get() <<
"\".";
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;
265 bool sortIndexComparator( osg::ref_ptr< WGETexture3D > a, osg::ref_ptr< WGETexture3D > b )
267 return ( a->sortIndex()->get() < b->sortIndex()->get() );
282 ( *iter )->sortIndex()->set( index );
301 if( infoItem == r->get().end() )
322 ( unit < maxTexUnits ) && ( iter != rt->get().end() );
339 if( iter == w->get().end() )
345 if( iter + 1 == w->get().end() )
351 std::iter_swap( iter, iter + 1 );
366 if( iter == w->get().end() )
372 if( iter == w->get().begin() )
378 std::iter_swap( iter, iter - 1 );
393 if( iter == w->get().end() )
399 if( iter == w->get().begin() )
405 w->get().erase( iter );
406 w->get().insert( w->get().begin(), texture );
421 if( iter == w->get().end() )
427 if( iter + 1 == w->get().end() )
433 w->get().erase( iter );
434 w->get().push_back( texture );
449 if( iter == w->get().end() )
456 if( idx > w->get().size() )
462 if( iter == ( w->get().begin() + idx ) )
468 size_t eraseIdx = iter - w->get().begin();
469 size_t eraseShift = 0;
471 if( ( w->get().begin() + idx ) < iter )
479 w->get().insert( w->get().begin() + idx, texture );
480 w->get().erase( w->get().begin() + eraseIdx + eraseShift );