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

Inheritance diagram for drawShaderQuads< 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 drawShaderQuads< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >

Definition at line 2333 of file OSGParticles.cpp.


Member Function Documentation

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

Implements osg::ParticlesDrawer.

Definition at line 2335 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.

02337     {   
02338         Window *win = action->getWindow();
02339         
02340         void (OSG_APIENTRY*_glMultiTexCoord3fvARB) 
02341             (GLenum which, GLubyte * data)=
02342             (void (OSG_APIENTRY*) (GLenum which, GLubyte * data))
02343                 win->getFunction(_funcglMultiTexCoord3fvARB);
02344 
02345         // init traits
02346         typename colTrait::dataType colData;
02347         colTrait::init(part, action, colData);
02348 
02349         typename texTrait::dataType texData;
02350         texTrait::init(part, action, texData);
02351 
02352         typename sizeTrait::dataType sizeData;
02353         sizeTrait::init(part, action, sizeData);
02354 
02355         typename normalTrait::dataType normalData;
02356         normalTrait::init(part, action, normalData);
02357 
02358         typename posTrait::dataType posData;
02359         posTrait::init(part, action, posData, part->getPositions());
02360 
02361         typename secPosTrait::dataType secPosData;
02362         secPosTrait::init(part, action, secPosData, part->getSecPositions());
02363 
02364         GeoPositionsPtr pos = part->getPositions();
02365         
02366         glBegin(GL_QUADS);
02367 
02368         Int32 i;
02369 
02370         for(UInt32 ii = 0; ii < length; ++ii)
02371         {
02372             i = index[ii];
02373 
02374             if(i < 0 || i > Int32(pos->getSize()))
02375                 continue;
02376 
02377             if(colTrait::particle (colData,  i))
02378                 continue;
02379 
02380             if(texTrait::particle(texData, i))
02381                 continue;
02382 
02383             if(sizeTrait::particle(sizeData, i))
02384                 continue;
02385 
02386             if(normalTrait::particle(normalData, i))
02387                 continue;
02388 
02389             if(posTrait::particle(posData, i))
02390                 continue;
02391 
02392             if(secPosTrait::particle(secPosData, i))
02393                 continue;
02394 
02395             
02396             Vec3f s = sizeTrait::size(sizeData, i);
02397 
02398             if(s[0] == 0)
02399                 continue;
02400             
02401             normalTrait::normal(normalData, 0);
02402             
02403             _glMultiTexCoord3fvARB(GL_TEXTURE1_ARB,
02404                      (GLubyte*)posTrait::position(posData).getValues());
02405             _glMultiTexCoord3fvARB(GL_TEXTURE2_ARB,
02406                      (GLubyte*)secPosTrait::position(secPosData).getValues());
02407             _glMultiTexCoord3fvARB(GL_TEXTURE3_ARB, (GLubyte*)s.getValues());
02408             
02409             texTrait::vertex(texData, 0, 0, 0);
02410             glVertex2f      (-.5f, -.5f);
02411             texTrait::vertex(texData, 0, 1, 0);
02412             glVertex2f      ( .5f, -.5f);
02413             texTrait::vertex(texData, 0, 1, 1);
02414             glVertex2f      ( .5f,  .5f);
02415             texTrait::vertex(texData, 0, 0, 1);
02416             glVertex2f      (-.5f,  .5f);
02417         }
02418 
02419         glEnd();
02420     }

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

Implements osg::ParticlesDrawer.

Definition at line 2422 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.

02423     {
02424         Window *win = action->getWindow();
02425         
02426         void (OSG_APIENTRY*_glMultiTexCoord3fvARB) 
02427             (GLenum which, GLubyte * data)=
02428             (void (OSG_APIENTRY*) (GLenum which, GLubyte * data))
02429                 win->getFunction(_funcglMultiTexCoord3fvARB);
02430 
02431         // init traits
02432         typename colTrait::dataType colData;
02433         colTrait::init(part, action, colData);
02434 
02435         typename texTrait::dataType texData;
02436         texTrait::init(part, action, texData);
02437 
02438         typename sizeTrait::dataType sizeData;
02439         sizeTrait::init(part, action, sizeData);
02440 
02441         typename normalTrait::dataType normalData;
02442         normalTrait::init(part, action, normalData);
02443 
02444         typename posTrait::dataType posData;
02445         posTrait::init(part, action, posData, part->getPositions());
02446 
02447         typename secPosTrait::dataType secPosData;
02448         secPosTrait::init(part, action, secPosData, part->getSecPositions());
02449 
02450         GeoPositionsPtr pos = part->getPositions();
02451         
02452         glBegin(GL_QUADS);
02453 
02454         Int32 i;
02455  
02456         for(UInt32 i = 0; i < length; ++i)
02457         {
02458             if(colTrait::particle (colData,  i))
02459                 continue;
02460 
02461             if(texTrait::particle(texData, i))
02462                 continue;
02463 
02464             if(sizeTrait::particle(sizeData, i))
02465                 continue;
02466 
02467             if(normalTrait::particle(normalData, i))
02468                 continue;
02469 
02470             if(posTrait::particle(posData, i))
02471                 continue;
02472 
02473             if(secPosTrait::particle(secPosData, i))
02474                 continue;
02475 
02476             
02477             Vec3f s = sizeTrait::size(sizeData, i);
02478 
02479             if(s[0] == 0)
02480                 continue;
02481             
02482             normalTrait::normal(normalData, 0);
02483             
02484             _glMultiTexCoord3fvARB(GL_TEXTURE1_ARB,
02485                      (GLubyte*)posTrait::position(posData).getValues());
02486             _glMultiTexCoord3fvARB(GL_TEXTURE2_ARB,
02487                      (GLubyte*)secPosTrait::position(secPosData).getValues());
02488             _glMultiTexCoord3fvARB(GL_TEXTURE3_ARB, (GLubyte*)s.getValues());
02489             
02490             texTrait::vertex(texData, 0, 0, 0);
02491             glVertex2f      (-.5f, -.5f);
02492             texTrait::vertex(texData, 0, 1, 0);
02493             glVertex2f      ( .5f, -.5f);
02494             texTrait::vertex(texData, 0, 1, 1);
02495             glVertex2f      ( .5f,  .5f);
02496             texTrait::vertex(texData, 0, 0, 1);
02497             glVertex2f      (-.5f,  .5f);
02498         }
02499 
02500         glEnd();
02501     }


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