MCPcopy Create free account
hub / github.com/GarageGames/Torque3D / renderParticle

Method renderParticle

Engine/source/renderInstance/renderParticleMgr.cpp:472–532  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

470}
471
472void RenderParticleMgr::renderParticle(ParticleRenderInst* ri, SceneRenderState* state)
473{
474 // We want to turn everything into variation on a pre-multiplied alpha blend
475 F32 alphaFactor = 0.0f, alphaScale = 1.0f;
476 switch(ri->blendStyle)
477 {
478 // SrcAlpha, InvSrcAlpha
479 case ParticleRenderInst::BlendNormal:
480 alphaFactor = 1.0f;
481 break;
482
483 // SrcAlpha, One
484 case ParticleRenderInst::BlendAdditive:
485 alphaFactor = 1.0f;
486 alphaScale = 0.0f;
487 break;
488
489 // SrcColor, One
490 case ParticleRenderInst::BlendGreyscale:
491 alphaFactor = -1.0f;
492 alphaScale = 0.0f;
493 break;
494 }
495
496 mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaFactorSC, alphaFactor );
497 mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaScaleSC, alphaScale );
498
499 mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mFSModelViewProjSC, *ri->modelViewProj );
500 mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mOneOverFarSC, 1.0f / state->getFarPlane() );
501
502 if ( mParticleShaderConsts.mOneOverSoftnessSC->isValid() )
503 {
504 F32 oneOverSoftness = 1.0f;
505 if ( ri->softnessDistance > 0.0f )
506 oneOverSoftness = 1.0f / ( ri->softnessDistance / state->getFarPlane() );
507 mParticleShaderConsts.mShaderConsts->set( mParticleShaderConsts.mOneOverSoftnessSC, oneOverSoftness );
508 }
509
510 GFX->setShader( mParticleShader );
511 GFX->setShaderConstBuffer( mParticleShaderConsts.mShaderConsts );
512
513 GFX->setTexture( mParticleShaderConsts.mSamplerDiffuse->getSamplerRegister(), ri->diffuseTex );
514
515 // Set up the prepass texture.
516 if ( mParticleShaderConsts.mPrePassTargetParamsSC->isValid() )
517 {
518 GFXTextureObject *texObject = mPrepassTarget ? mPrepassTarget->getTexture(0) : NULL;
519 GFX->setTexture( mParticleShaderConsts.mSamplerPrePassTex->getSamplerRegister(), texObject );
520
521 Point4F rtParams( 0.0f, 0.0f, 1.0f, 1.0f );
522 if ( texObject )
523 ScreenSpace::RenderTargetParameters(texObject->getSize(), mPrepassTarget->getViewport(), rtParams);
524
525 mParticleShaderConsts.mShaderConsts->set( mParticleShaderConsts.mPrePassTargetParamsSC, rtParams );
526 }
527
528 GFX->setPrimitiveBuffer( *ri->primBuff );
529 GFX->setVertexBuffer( *ri->vertBuff );

Callers 1

renderMethod · 0.80

Calls 13

getFarPlaneMethod · 0.80
setShaderConstBufferMethod · 0.80
setPrimitiveBufferMethod · 0.80
setVertexBufferMethod · 0.80
setSafeMethod · 0.45
isValidMethod · 0.45
setMethod · 0.45
setShaderMethod · 0.45
setTextureMethod · 0.45
getSamplerRegisterMethod · 0.45
getTextureMethod · 0.45
getSizeMethod · 0.45

Tested by

no test coverage detected