
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 2333 of file OSGParticles.cpp.
| 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 }
| 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 }
1.5.5