protected void SetupBaseEffect(MyEffectBase shader, MyRender.MyRenderSetup setup, MyLodTypeEnum lodType) { MyRenderCamera.SetupBaseEffect(shader, lodType, setup.FogMultiplierMult); if (lodType == MyLodTypeEnum.LOD_NEAR) { shader.SetProjectionMatrix(ref MyRenderCamera.ProjectionMatrixForNearObjects); } else { shader.SetProjectionMatrix(ref MyRenderCamera.ProjectionMatrix); } shader.SetViewMatrix(ref MyRenderCamera.ViewMatrixAtZero); var rasterizerState = MyRender.Settings.Wireframe ? WireframeRasterizerState : SolidRasterizerState; rasterizerState.Apply(); }
/// <summary> /// Renders a list of models to the shadow map, and returns a surface /// containing the shadow occlusion factor /// </summary> public void Render() { if (MyRender.Sun.Direction == Vector3.Zero) { return; } MyRender.GetRenderProfiler().StartProfilingBlock("MyShadowRenderer::Render"); if (MultiThreaded) { WaitUntilPrepareForDrawCompleted(); } else { //PrepareFrame(); PrepareCascadesForDraw(); } IssueQueriesForCascades(); MyRender.GetRenderProfiler().StartProfilingBlock("Set & Clear RT"); // Set our targets MyRender.SetRenderTarget(MyRender.GetRenderTarget(m_shadowRenderTarget), MyRender.GetRenderTarget(m_shadowDepthTarget)); MyRender.GraphicsDevice.Clear(ClearFlags.ZBuffer, new ColorBGRA(0.0f), 1.0f, 0); DepthStencilState.Default.Apply(); RasterizerState.CullNone.Apply(); //RasterizerState.CullCounterClockwise.Apply(); BlendState.Opaque.Apply(); MyRender.GetRenderProfiler().EndProfilingBlock(); MyRender.GetRenderProfiler().StartProfilingBlock("Render 4 ShadowMaps"); // Render our scene geometry to each split of the cascade for (int i = 0; i < NumSplits; i++) { if (m_skip[i]) { continue; } if (!m_visibility[i]) { continue; } RenderShadowMap(i); //IssueQueriesForShadowMap(i); } //Restore viewport MyRenderCamera.UpdateCamera(); MyRender.SetDeviceViewport(MyRenderCamera.Viewport); MyRender.GetRenderProfiler().EndProfilingBlock(); // MyGuiManager.TakeScreenshot(); MyRender.TakeScreenshot("ShadowMap", MyRender.GetRenderTarget(m_shadowRenderTarget), MyEffectScreenshot.ScreenshotTechniqueEnum.Color); // Texture.ToFile(MyRender.GetRenderTarget(m_shadowRenderTarget), "c:\\test.dds", ImageFileFormat.Dds); MyRender.GetRenderProfiler().EndProfilingBlock(); }