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

Method renderInstance

Engine/source/renderInstance/renderParticleMgr.cpp:372–470  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

370}
371
372void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState *state)
373{
374 // Draw system path, or draw composite path
375 if(ri->systemState == PSS_DrawComplete)
376 return;
377
378 if(ri->systemState != PSS_AwaitingCompositeDraw)
379 {
380 // Set proper stateblock, and update state
381 if(ri->systemState == PSS_AwaitingOffscreenDraw)
382 {
383 GFX->setStateBlock( _getOffscreenStateBlock(ri) );
384 ri->systemState = PSS_AwaitingCompositeDraw;
385 mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mModelViewProjSC,
386 *ri->modelViewProj * mOffscreenSystems[ri->targetIndex].clipMatrix );
387 }
388 else
389 {
390 if(ri->systemState == PSS_AwaitingMixedResDraw)
391 GFX->setStateBlock( _getMixedResStateBlock( ri ) );
392 else
393 GFX->setStateBlock( _getHighResStateBlock( ri ) );
394 ri->systemState = PSS_DrawComplete;
395 mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mModelViewProjSC, *ri->modelViewProj );
396 }
397
398 renderParticle(ri, state);
399 }
400 else if(ri->systemState == PSS_AwaitingCompositeDraw)
401 {
402 OffscreenSystemEntry &systemEntry = mOffscreenSystems[ri->targetIndex];
403
404 // If this system has already been composited this frame, skip it
405 if(systemEntry.drawnThisFrame)
406 return;
407
408 // Non-target render, composite the particle system back into the scene
409 GFX->setVertexBuffer(mScreenQuadVertBuff);
410 GFX->setPrimitiveBuffer(mScreenQuadPrimBuff);
411
412
413 // Set up shader constants
414 mParticleCompositeShaderConsts.mShaderConsts->setSafe( mParticleCompositeShaderConsts.mScreenRect, *((Point4F *)&systemEntry.screenRect) );
415
416 // Set offscreen texture
417 Point4F rtParams;
418 GFXTextureObject *particleSource = mNamedTarget.getTexture();
419 GFX->setTexture( mParticleCompositeShaderConsts.mSamplerColorSource->getSamplerRegister(), particleSource );
420 if(particleSource)
421 {
422 ScreenSpace::RenderTargetParameters(particleSource->getSize(), mNamedTarget.getViewport(), rtParams);
423 mParticleCompositeShaderConsts.mShaderConsts->setSafe( mParticleCompositeShaderConsts.mOffscreenTargetParamsSC, rtParams );
424 }
425
426 // And edges
427 GFXTextureObject *texObject = mEdgeTarget ? mEdgeTarget->getTexture() : NULL;
428 GFX->setTexture( mParticleCompositeShaderConsts.mSamplerEdgeSource->getSamplerRegister(), texObject );
429 if(texObject)

Callers 1

renderMethod · 0.80

Calls 13

setStateBlockMethod · 0.80
setVertexBufferMethod · 0.80
setPrimitiveBufferMethod · 0.80
setShaderConstBufferMethod · 0.80
setSafeMethod · 0.45
getTextureMethod · 0.45
setTextureMethod · 0.45
getSamplerRegisterMethod · 0.45
getSizeMethod · 0.45
setShaderMethod · 0.45
drawIndexedPrimitiveMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected