| 44 | } |
| 45 | |
| 46 | void SingleLightShadowMap::_render( RenderPassManager* renderPass, |
| 47 | const SceneRenderState *diffuseState ) |
| 48 | { |
| 49 | PROFILE_SCOPE(SingleLightShadowMap_render); |
| 50 | |
| 51 | const LightMapParams *lmParams = mLight->getExtended<LightMapParams>(); |
| 52 | const bool bUseLightmappedGeometry = lmParams ? !lmParams->representedInLightmap || lmParams->includeLightmappedGeometryInShadow : true; |
| 53 | |
| 54 | const U32 texSize = getBestTexSize(); |
| 55 | |
| 56 | if ( mShadowMapTex.isNull() || |
| 57 | mTexSize != texSize ) |
| 58 | { |
| 59 | mTexSize = texSize; |
| 60 | |
| 61 | mShadowMapTex.set( mTexSize, mTexSize, |
| 62 | ShadowMapFormat, &ShadowMapProfile, |
| 63 | "SingleLightShadowMap" ); |
| 64 | } |
| 65 | |
| 66 | GFXFrustumSaver frustSaver; |
| 67 | GFXTransformSaver saver; |
| 68 | |
| 69 | MatrixF lightMatrix; |
| 70 | calcLightMatrices( lightMatrix, diffuseState->getCameraFrustum() ); |
| 71 | lightMatrix.inverse(); |
| 72 | GFX->setWorldMatrix(lightMatrix); |
| 73 | |
| 74 | const MatrixF& lightProj = GFX->getProjectionMatrix(); |
| 75 | mWorldToLightProj = lightProj * lightMatrix; |
| 76 | |
| 77 | // Render the shadowmap! |
| 78 | GFX->pushActiveRenderTarget(); |
| 79 | mTarget->attachTexture( GFXTextureTarget::Color0, mShadowMapTex ); |
| 80 | mTarget->attachTexture( GFXTextureTarget::DepthStencil, |
| 81 | _getDepthTarget( mShadowMapTex->getWidth(), mShadowMapTex->getHeight() ) ); |
| 82 | GFX->setActiveRenderTarget(mTarget); |
| 83 | GFX->clear(GFXClearStencil | GFXClearZBuffer | GFXClearTarget, ColorI(255,255,255), 1.0f, 0); |
| 84 | |
| 85 | SceneManager* sceneManager = diffuseState->getSceneManager(); |
| 86 | |
| 87 | SceneRenderState shadowRenderState |
| 88 | ( |
| 89 | sceneManager, |
| 90 | SPT_Shadow, |
| 91 | SceneCameraState::fromGFXWithViewport( diffuseState->getViewport() ), |
| 92 | renderPass |
| 93 | ); |
| 94 | |
| 95 | shadowRenderState.getMaterialDelegate().bind( this, &LightShadowMap::getShadowMaterial ); |
| 96 | shadowRenderState.renderNonLightmappedMeshes( true ); |
| 97 | shadowRenderState.renderLightmappedMeshes( bUseLightmappedGeometry ); |
| 98 | shadowRenderState.setDiffuseCameraTransform( diffuseState->getCameraTransform() ); |
| 99 | shadowRenderState.setWorldToScreenScale( diffuseState->getWorldToScreenScale() ); |
| 100 | |
| 101 | sceneManager->renderSceneNoLights( &shadowRenderState, SHADOW_TYPEMASK ); |
| 102 | |
| 103 | _debugRender( &shadowRenderState ); |
nothing calls this directly
no test coverage detected