public DirectionalLightRenderer(DX11Game game, GBuffer gBuffer) { this.game = game; this.gBuffer = gBuffer; var device = game.Device; context = device.ImmediateContext; shadowsShader = BasicShader.LoadAutoreload(game, new System.IO.FileInfo( CompiledShaderCache.Current.RootShaderPath + "Deferred\\DirectionalLight.fx")); shadowsShader.SetTechnique("Technique0"); noShadowsShader = BasicShader.LoadAutoreload(game, new System.IO.FileInfo( CompiledShaderCache.Current.RootShaderPath + "Deferred\\DirectionalLight.fx"), null, new[] { new ShaderMacro("DISABLE_SHADOWS") }); noShadowsShader.SetTechnique("Technique0"); quad = new FullScreenQuad(device); layout = FullScreenQuad.CreateInputLayout(device, shadowsShader.GetCurrentPass(0)); LightDirection = Vector3.Normalize(new Vector3(1, 2, 1)); Color = new Vector3(1, 1, 0.9f); CSMRenderer = new CSM.CSMRenderer(game); }
public void TestCascadedShadowMapping() { var game = new DX11Game(); game.InitDirectX(); var device = game.Device; var context = device.ImmediateContext; var filledGBuffer = new TestFilledGBuffer(game, 800, 600); var csmRenderer = new CSMRenderer(game); var toggle = false; var light = new DirectionalLight(); game.GameLoopEvent += delegate { context.ClearState(); filledGBuffer.DrawUpdatedGBuffer(); csmRenderer.UpdateShadowMap(delegate(OrthographicCamera lightCamera) { game.Camera = lightCamera; filledGBuffer.Draw(); game.Camera = game.SpectaterCamera; }, light, game.SpectaterCamera); game.SetBackbuffer(); if (game.Keyboard.IsKeyPressed(Key.C)) { toggle = !toggle; } if (toggle) { light.Direction = game.SpectaterCamera.CameraDirection; } if (game.Keyboard.IsKeyDown(Key.I)) { GBufferTest.DrawGBuffer(game, filledGBuffer.GBuffer); } else { csmRenderer.RenderShadowOcclusion(game.SpectaterCamera, filledGBuffer.GBuffer.DepthRV); //light.Draw(); game.TextureRenderer.Draw(csmRenderer.ShadowMapRV, new Vector2(10, 10), new Vector2(590, 200)); for (int i = 0; i < 6; i++) { //game.LineManager3D.AddViewFrustum(light.LightCameras[i].ViewProjection, //new Color4(0, 1, 0)); } } }; game.Run(); }