drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait > Struct Template Reference

Inheritance diagram for drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >:

osg::ParticlesDrawer

List of all members.

Public Member Functions

virtual void drawIndexed (Particles *part, DrawActionBase *action, Int32 *index, UInt32 length)
virtual void draw (Particles *part, DrawActionBase *action, UInt32 length)


Detailed Description

template<class posTrait, class secPosTrait, class colTrait, class texTrait, class sizeTrait, class normalTrait>
struct drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >

Definition at line 2510 of file OSGParticles.cpp.


Member Function Documentation

template<class posTrait, class secPosTrait, class colTrait, class texTrait, class sizeTrait, class normalTrait>
virtual void drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::drawIndexed ( Particles part,
DrawActionBase action,
Int32 *  index,
UInt32  length 
) [inline, virtual]

Implements osg::ParticlesDrawer.

Definition at line 2512 of file OSGParticles.cpp.

References _funcglMultiTexCoord3fvARB, osg::Window::getFunction(), osg::ParticlesBase::getPositions(), osg::ParticlesBase::getSecPositions(), osg::PointInterface< ValueTypeT, StorageInterfaceT >::getValues(), osg::DrawActionBase::getWindow(), GL_TEXTURE1_ARB, GL_TEXTURE2_ARB, GL_TEXTURE3_ARB, GLenum, init(), and OSG_APIENTRY.

02514     {   
02515         Window *win = action->getWindow();
02516         
02517         void (OSG_APIENTRY*_glMultiTexCoord3fvARB) 
02518             (GLenum which, GLubyte * data)=
02519             (void (OSG_APIENTRY*) (GLenum which, GLubyte * data))
02520                 win->getFunction(_funcglMultiTexCoord3fvARB);
02521 
02522         // init traits
02523         typename colTrait::dataType colData;
02524         colTrait::init(part, action, colData);
02525 
02526         typename texTrait::dataType texData;
02527         texTrait::init(part, action, texData);
02528 
02529         typename sizeTrait::dataType sizeData;
02530         sizeTrait::init(part, action, sizeData);
02531 
02532         typename normalTrait::dataType normalData;
02533         normalTrait::init(part, action, normalData);
02534 
02535         typename posTrait::dataType posData;
02536         posTrait::init(part, action, posData, part->getPositions());
02537 
02538         typename secPosTrait::dataType secPosData;
02539         secPosTrait::init(part, action, secPosData, part->getSecPositions());
02540 
02541         GeoPositionsPtr pos = part->getPositions();
02542 
02543         Int32 i;
02544 
02545         for(UInt32 ii = 0; ii < length; ++ii)
02546         {
02547             i = index[ii];
02548 
02549             if(i < 0 || i > Int32(pos->getSize()))
02550                 continue;
02551 
02552             if(colTrait::particle (colData,  i))
02553                 continue;
02554 
02555             if(texTrait::particle(texData, i))
02556                 continue;
02557 
02558             if(sizeTrait::particle(sizeData, i))
02559                 continue;
02560 
02561             if(normalTrait::particle(normalData, i))
02562                 continue;
02563 
02564             if(posTrait::particle(posData, i))
02565                 continue;
02566 
02567             if(secPosTrait::particle(secPosData, i))
02568                 continue;
02569 
02570             
02571             Vec3f s = sizeTrait::size(sizeData, i);
02572 
02573             if(s[0] == 0)
02574                 continue;
02575              
02576             normalTrait::normal(normalData, 0);
02577            
02578             _glMultiTexCoord3fvARB(GL_TEXTURE1_ARB,
02579                      (GLubyte*)posTrait::position(posData).getValues());
02580             _glMultiTexCoord3fvARB(GL_TEXTURE2_ARB,
02581                      (GLubyte*)secPosTrait::position(secPosData).getValues());
02582             _glMultiTexCoord3fvARB(GL_TEXTURE3_ARB, (GLubyte*)s.getValues());
02583          
02584             glBegin(GL_QUAD_STRIP);
02585            
02586             UInt32 n = static_cast<UInt32>(s[2]);           
02587             Real32 step = 1.f / (n-1);
02588             Real32 v = 0.f;
02589             for(int y = 0; y < n; ++y, v += step)
02590             {             
02591                 texTrait::vertex(texData, 0, 0, v);
02592                 glVertex2f  (-.5f, v-.5f);
02593                 texTrait::vertex(texData, 0, 1, v);
02594                 glVertex2f  ( .5f, v-.5f);
02595             }
02596             
02597             glEnd();
02598         }
02599 
02600     }

template<class posTrait, class secPosTrait, class colTrait, class texTrait, class sizeTrait, class normalTrait>
virtual void drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::draw ( Particles part,
DrawActionBase action,
UInt32  length 
) [inline, virtual]

Implements osg::ParticlesDrawer.

Definition at line 2602 of file OSGParticles.cpp.

References _funcglMultiTexCoord3fvARB, osg::Window::getFunction(), osg::ParticlesBase::getPositions(), osg::ParticlesBase::getSecPositions(), osg::PointInterface< ValueTypeT, StorageInterfaceT >::getValues(), osg::DrawActionBase::getWindow(), GL_TEXTURE1_ARB, GL_TEXTURE2_ARB, GL_TEXTURE3_ARB, GLenum, init(), and OSG_APIENTRY.

02603     {
02604         Window *win = action->getWindow();
02605         
02606         void (OSG_APIENTRY*_glMultiTexCoord3fvARB) 
02607             (GLenum which, GLubyte * data)=
02608             (void (OSG_APIENTRY*) (GLenum which, GLubyte * data))
02609                 win->getFunction(_funcglMultiTexCoord3fvARB);
02610 
02611         // init traits
02612         typename colTrait::dataType colData;
02613         colTrait::init(part, action, colData);
02614 
02615         typename texTrait::dataType texData;
02616         texTrait::init(part, action, texData);
02617 
02618         typename sizeTrait::dataType sizeData;
02619         sizeTrait::init(part, action, sizeData);
02620 
02621         typename normalTrait::dataType normalData;
02622         normalTrait::init(part, action, normalData);
02623 
02624         typename posTrait::dataType posData;
02625         posTrait::init(part, action, posData, part->getPositions());
02626 
02627         typename secPosTrait::dataType secPosData;
02628         secPosTrait::init(part, action, secPosData, part->getSecPositions());
02629 
02630         GeoPositionsPtr pos = part->getPositions();
02631 
02632         Int32 i;
02633  
02634         for(UInt32 i = 0; i < length; ++i)
02635         {
02636             if(colTrait::particle (colData,  i))
02637                 continue;
02638 
02639             if(texTrait::particle(texData, i))
02640                 continue;
02641 
02642             if(sizeTrait::particle(sizeData, i))
02643                 continue;
02644 
02645             if(normalTrait::particle(normalData, i))
02646                 continue;
02647 
02648             if(posTrait::particle(posData, i))
02649                 continue;
02650 
02651             if(secPosTrait::particle(secPosData, i))
02652                 continue;
02653 
02654             
02655             Vec3f s = sizeTrait::size(sizeData, i);
02656 
02657             if(s[0] == 0)
02658                 continue;
02659              
02660             normalTrait::normal(normalData, 0);
02661            
02662             _glMultiTexCoord3fvARB(GL_TEXTURE1_ARB,
02663                      (GLubyte*)posTrait::position(posData).getValues());
02664             _glMultiTexCoord3fvARB(GL_TEXTURE2_ARB,
02665                      (GLubyte*)secPosTrait::position(secPosData).getValues());
02666             _glMultiTexCoord3fvARB(GL_TEXTURE3_ARB, (GLubyte*)s.getValues());
02667          
02668             glBegin(GL_QUAD_STRIP);
02669            
02670             UInt32 n = static_cast<UInt32>(s[2]);           
02671             Real32 step = 1.f / (n-1);
02672             Real32 v = 0.f;
02673             for(int y = 0; y < n; ++y, v += step)
02674             {
02675                 texTrait::vertex(texData, 0, 0, v);
02676                 glVertex2f  (-.5f, v-.5f);
02677                 texTrait::vertex(texData, 0, 1, v);
02678                 glVertex2f  ( .5f, v-.5f);
02679             }
02680             
02681             glEnd();
02682         }
02683     }


The documentation for this struct was generated from the following file:

Generated on Mon Mar 17 12:02:59 2008 for OpenSG by  doxygen 1.5.5