| 75 | } |
| 76 | |
| 77 | void ParaboloidLightShadowMap::_render( RenderPassManager* renderPass, |
| 78 | const SceneRenderState *diffuseState ) |
| 79 | { |
| 80 | PROFILE_SCOPE(ParaboloidLightShadowMap_render); |
| 81 | |
| 82 | const LightMapParams *lmParams = mLight->getExtended<LightMapParams>(); |
| 83 | const bool bUseLightmappedGeometry = lmParams ? !lmParams->representedInLightmap || lmParams->includeLightmappedGeometryInShadow : true; |
| 84 | |
| 85 | const U32 texSize = getBestTexSize(); |
| 86 | |
| 87 | if ( mShadowMapTex.isNull() || |
| 88 | mTexSize != texSize ) |
| 89 | { |
| 90 | mTexSize = texSize; |
| 91 | |
| 92 | mShadowMapTex.set( mTexSize, mTexSize, |
| 93 | ShadowMapFormat, &ShadowMapProfile, |
| 94 | "ParaboloidLightShadowMap" ); |
| 95 | } |
| 96 | |
| 97 | GFXFrustumSaver frustSaver; |
| 98 | GFXTransformSaver saver; |
| 99 | |
| 100 | // Render the shadowmap! |
| 101 | GFX->pushActiveRenderTarget(); |
| 102 | |
| 103 | // Calc matrix and set up visible distance |
| 104 | mWorldToLightProj = mLight->getTransform(); |
| 105 | mWorldToLightProj.inverse(); |
| 106 | GFX->setWorldMatrix(mWorldToLightProj); |
| 107 | |
| 108 | const F32 &lightRadius = mLight->getRange().x; |
| 109 | GFX->setOrtho(-lightRadius, lightRadius, -lightRadius, lightRadius, 1.0f, lightRadius, true); |
| 110 | |
| 111 | // Set up target |
| 112 | mTarget->attachTexture( GFXTextureTarget::Color0, mShadowMapTex ); |
| 113 | mTarget->attachTexture( GFXTextureTarget::DepthStencil, |
| 114 | _getDepthTarget( mShadowMapTex->getWidth(), mShadowMapTex->getHeight() ) ); |
| 115 | GFX->setActiveRenderTarget(mTarget); |
| 116 | GFX->clear(GFXClearTarget | GFXClearStencil | GFXClearZBuffer, ColorI(255,255,255,255), 1.0f, 0); |
| 117 | |
| 118 | // Create scene state, prep it |
| 119 | SceneManager* sceneManager = diffuseState->getSceneManager(); |
| 120 | |
| 121 | SceneRenderState shadowRenderState |
| 122 | ( |
| 123 | sceneManager, |
| 124 | SPT_Shadow, |
| 125 | SceneCameraState::fromGFXWithViewport( diffuseState->getViewport() ), |
| 126 | renderPass |
| 127 | ); |
| 128 | |
| 129 | shadowRenderState.getMaterialDelegate().bind( this, &LightShadowMap::getShadowMaterial ); |
| 130 | shadowRenderState.renderNonLightmappedMeshes( true ); |
| 131 | shadowRenderState.renderLightmappedMeshes( bUseLightmappedGeometry ); |
| 132 | shadowRenderState.setDiffuseCameraTransform( diffuseState->getCameraTransform() ); |
| 133 | shadowRenderState.setWorldToScreenScale( diffuseState->getWorldToScreenScale() ); |
| 134 |
nothing calls this directly
no test coverage detected