
Public Member Functions | |
| virtual void | drawIndexed (Particles *part, DrawActionBase *action, Int32 *index, UInt32 length) |
| virtual void | draw (Particles *part, DrawActionBase *action, UInt32 length) |
Definition at line 2510 of file OSGParticles.cpp.
| 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 }
| 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 }
1.5.5