public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Black); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _layout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); var view = _camera.View; var proj = _camera.Proj; // doesn't seem to be much benefit here // 550 fps avg with depth pre-pass // 775 fps avg without //DepthPrePass(); ForwardSetup(); ImmediateContext.OutputMerger.DepthStencilState = RenderStates.LessEqualDSS; var activeTech = _effect.Directional; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _bunnyInstance.Draw(ImmediateContext, pass, view, proj, DrawDirectional); } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Black); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _layout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); var view = _camera.View; var proj = _camera.Proj; SetupAmbient(); var activeTech = _effect.Ambient; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _bunnyInstance.Draw(ImmediateContext, pass, view, proj, DrawAmbient); } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.CornflowerBlue); ImmediateContext.ClearDepthStencilView( DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); var viewProj = _camera.ViewProj; var view = _camera.View; var proj = _camera.Proj; Effects.NormalMapFX.SetDirLights(_dirLights); Effects.NormalMapFX.SetEyePosW(_camera.Position); var activeTech = Effects.NormalMapFX.Light3TexTech; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _modelInstance.Draw(ImmediateContext, pass, view, proj); _stoneInstance.Draw(ImmediateContext, pass, view, proj); _dwarfInstance.Draw(ImmediateContext, pass, view, proj); } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Black); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _layout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); var view = _camera.View; var proj = _camera.Proj; // directional lighting ImmediateContext.OutputMerger.DepthStencilState = RenderStates.LessEqualDSS; ForwardSetup(); var activeTech = _effect.Directional; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _bunnyInstance.Draw(ImmediateContext, pass, view, proj, DrawDirectional); } // point lights var prevBlend = ImmediateContext.OutputMerger.BlendState; ImmediateContext.OutputMerger.BlendState = _additiveBlend; for (int i = 0; i < NumLights; i++) { PointSetup(i); activeTech = _effect.PointLight; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _bunnyInstance.Draw(ImmediateContext, pass, view, proj, DrawPoint); } } ImmediateContext.OutputMerger.BlendState = prevBlend; SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); var view = _camera.View; var proj = _camera.Proj; Effects.NormalMapFX.SetDirLights(_dirLights); Effects.NormalMapFX.SetEyePosW(_camera.Position); Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetEyePosW(_camera.Position); var floorTech = Effects.NormalMapFX.Light3TexTech; var activeTech = Effects.BasicFX.Light3Tech; ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } for (var p = 0; p < floorTech.Description.PassCount; p++) { var pass = floorTech.GetPassByIndex(p); _grid.Draw(ImmediateContext, pass, view, proj); _cylinder.Draw(ImmediateContext, pass, view, proj); } for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); foreach (var firework in _fireworks) { firework.Render(ImmediateContext, pass, view, proj); } } _sky.Draw(ImmediateContext, _camera); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; SwapChain.Present(0, PresentFlags.None); ImmediateContext.Rasterizer.State = null; }
public override void DrawScene() { ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); var view = _camera.View; var proj = _camera.Proj; Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetEyePosW(_camera.Position); var activeTech = Effects.BasicFX.Light3Tech; ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); if (_showSphere) { _sphere.Draw(ImmediateContext, pass, view, proj, RenderMode.Basic); } else { _geosphere.Draw(ImmediateContext, pass, view, proj, RenderMode.Basic); } } SwapChain.Present(0, PresentFlags.None); ImmediateContext.Rasterizer.State = null; }
public override void DrawScene() { Effects.BasicFX.SetShadowMap(null); Effects.NormalMapFX.SetShadowMap(null); _sMap.BindDsvAndSetNullRenderTarget(ImmediateContext); DrawSceneToShadowMap(); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.SetTargets(DepthStencilView, RenderTargetView); ImmediateContext.Rasterizer.SetViewports(Viewport); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); var viewProj = _camera.ViewProj; var view = _camera.View; var proj = _camera.Proj; Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetEyePosW(_camera.Position); Effects.BasicFX.SetCubeMap(_sky.CubeMapSRV); Effects.BasicFX.SetShadowMap(_sMap.DepthMapSRV); Effects.NormalMapFX.SetDirLights(_dirLights); Effects.NormalMapFX.SetEyePosW(_camera.Position); Effects.NormalMapFX.SetCubeMap(_sky.CubeMapSRV); Effects.NormalMapFX.SetShadowMap(_sMap.DepthMapSRV); var activeTech = Effects.NormalMapFX.Light3TexTech; var activeSphereTech = Effects.BasicFX.Light3ReflectTech; var activeSkullTech = Effects.BasicFX.Light3ReflectTech; ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } for (var p = 0; p < activeTech.Description.PassCount; p++) { // draw grid var pass = activeTech.GetPassByIndex(p); _grid.ShadowTransform = _shadowTransform; _grid.Draw(ImmediateContext, pass, view, proj); // draw box _box.ShadowTransform = _shadowTransform; _box.Draw(ImmediateContext, pass, view, proj); // draw columns foreach (var cylinder in _cylinders) { cylinder.ShadowTransform = _shadowTransform; cylinder.Draw(ImmediateContext, pass, view, proj); } } ImmediateContext.HullShader.Set(null); ImmediateContext.DomainShader.Set(null); ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; for (var p = 0; p < activeSphereTech.Description.PassCount; p++) { var pass = activeSphereTech.GetPassByIndex(p); foreach (var sphere in _spheres) { sphere.ShadowTransform = _shadowTransform; sphere.Draw(ImmediateContext, pass, view, proj, RenderMode.Basic); } } var stride = Basic32.Stride; const int offset = 0; ImmediateContext.Rasterizer.State = null; ImmediateContext.InputAssembler.InputLayout = InputLayouts.Basic32; ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_skullVB, stride, offset)); ImmediateContext.InputAssembler.SetIndexBuffer(_skullIB, Format.R32_UInt, 0); for (var p = 0; p < activeSkullTech.Description.PassCount; p++) { var world = _skullWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetShadowTransform(world * _shadowTransform); Effects.BasicFX.SetMaterial(_skullMat); activeSkullTech.GetPassByIndex(p).Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); } DrawScreenQuad(); _sky.Draw(ImmediateContext, _camera); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; SwapChain.Present(0, PresentFlags.None); }
public void Render(DeviceContext dc, EffectPass effectPass, Matrix view, Matrix proj) { _modelInstance.World *= Matrix.Translation(0, 0.1f, 0); _modelInstance.Draw(dc, effectPass, view, proj, RenderMode.Basic); }
public override void DrawScene() { Effects.TerrainFX.SetSsaoMap(_whiteTex); Effects.TerrainFX.SetShadowMap(_sMap.DepthMapSRV); Effects.TerrainFX.SetShadowTransform(_shadowTransform); _minimap.RenderMinimap(_dirLights); var view = _lightView; var proj = _lightProj; var viewProj = view * proj; _terrain.Renderer.DrawToShadowMap(ImmediateContext, _sMap, viewProj); ImmediateContext.Rasterizer.State = null; ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.Rasterizer.SetViewports(Viewport); _terrain.Renderer.ComputeSsao(ImmediateContext, _camera, _ssao, DepthStencilView); ImmediateContext.OutputMerger.SetTargets(DepthStencilView, RenderTargetView); ImmediateContext.Rasterizer.SetViewports(Viewport); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } if (Util.IsKeyDown(Keys.S)) { Effects.TerrainFX.SetSsaoMap(_whiteTex); } else { Effects.TerrainFX.SetSsaoMap(_ssao.AmbientSRV); } if (!Util.IsKeyDown(Keys.A)) { Effects.TerrainFX.SetShadowMap(_sMap.DepthMapSRV); Effects.TerrainFX.SetShadowTransform(_shadowTransform); } else { Effects.TerrainFX.SetShadowMap(_whiteTex); } Effects.BasicFX.SetEyePosW(_camera.Position); Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetSsaoMap(_whiteTex); Effects.BasicFX.SetSsaoMap(_whiteTex); if (_showSphere) { _sphere.World = Matrix.Translation(_spherePos); for (var p = 0; p < Effects.BasicFX.Light1Tech.Description.PassCount; p++) { var pass = Effects.BasicFX.Light1Tech.GetPassByIndex(p); _sphere.Draw(ImmediateContext, pass, _camera.View, _camera.Proj, RenderMode.Basic); } } _terrain.Renderer.Draw(ImmediateContext, _camera, _dirLights); ImmediateContext.Rasterizer.State = null; _sky.Draw(ImmediateContext, _camera); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; _minimap.Draw(ImmediateContext); SwapChain.Present(0, PresentFlags.None); }
public static void DrawModel(this RenderContext context, BasicModelInstance modelInstance, D3DVertexColorEffect effect, Matrix viewProjection) { modelInstance.Draw(context.Direct3DDevice.ImmediateContext, effect, viewProjection); }
public override void DrawScene() { ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); var viewProj = _camera.ViewProj; var view = _camera.View; var proj = _camera.Proj; Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetEyePosW(_camera.Position); Effects.BasicFX.SetCubeMap(_sky.CubeMapSRV); Effects.NormalMapFX.SetDirLights(_dirLights); Effects.NormalMapFX.SetEyePosW(_camera.Position); Effects.NormalMapFX.SetCubeMap(_sky.CubeMapSRV); Effects.DisplacementMapFX.SetDirLights(_dirLights); Effects.DisplacementMapFX.SetEyePosW(_camera.Position); Effects.DisplacementMapFX.SetCubeMap(_sky.CubeMapSRV); Effects.DisplacementMapFX.SetHeightScale(0.07f); Effects.DisplacementMapFX.SetMaxTessDistance(1.0f); Effects.DisplacementMapFX.SetMinTessDistance(25.0f); Effects.DisplacementMapFX.SetMinTessFactor(1.0f); Effects.DisplacementMapFX.SetMaxTessFactor(5.0f); Effects.WavesFX.SetDirLights(_dirLights); Effects.WavesFX.SetEyePosW(_camera.Position); Effects.WavesFX.SetCubeMap(_sky.CubeMapSRV); Effects.WavesFX.SetHeightScale0(0.4f); Effects.WavesFX.SetHeightScale1(1.2f); Effects.WavesFX.SetMaxTessDistance(4.0f); Effects.WavesFX.SetMinTessDistance(30.0f); Effects.WavesFX.SetMinTessFactor(2.0f); Effects.WavesFX.SetMaxTessFactor(6.0f); var activeSkullTech = Effects.BasicFX.Light3ReflectTech; var waveTech = Effects.WavesFX.Light3ReflectTech; var activeTech = Effects.DisplacementMapFX.Light3TexTech; var activeSphereTech = Effects.BasicFX.Light3ReflectTech; ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.PatchListWith3ControlPoints; if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } _waves.Draw(ImmediateContext, waveTech, viewProj); for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _box.Draw(ImmediateContext, pass, view, proj, RenderMode.DisplacementMapped); // draw columns foreach (var cylinder in _cylinders) { cylinder.Draw(ImmediateContext, pass, view, proj, RenderMode.DisplacementMapped); } } ImmediateContext.HullShader.Set(null); ImmediateContext.DomainShader.Set(null); ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; for (var p = 0; p < activeSphereTech.Description.PassCount; p++) { var pass = activeSphereTech.GetPassByIndex(p); foreach (var sphere in _spheres) { sphere.Draw(ImmediateContext, pass, view, proj, RenderMode.Basic); } } ImmediateContext.Rasterizer.State = null; for (var p = 0; p < activeSkullTech.Description.PassCount; p++) { _skull.Draw(ImmediateContext, activeSkullTech.GetPassByIndex(p), view, proj, RenderMode.Basic); } _sky.Draw(ImmediateContext, _camera); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { ImmediateContext.Rasterizer.State = null; ImmediateContext.ClearDepthStencilView( DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0 ); ImmediateContext.Rasterizer.SetViewports(Viewport); _ssao.SetNormalDepthRenderTarget(DepthStencilView); DrawSceneToSsaoNormalDepthMap(); _ssao.ComputeSsao(_camera); _ssao.BlurAmbientMap(4); ImmediateContext.OutputMerger.SetTargets(DepthStencilView, RenderTargetView); ImmediateContext.Rasterizer.SetViewports(Viewport); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); var viewProj = _camera.ViewProj; var view = _camera.View; var proj = _camera.Proj; Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetEyePosW(_camera.Position); //Effects.BasicFX.SetCubeMap(_sky.CubeMapSRV); Effects.NormalMapFX.SetDirLights(_dirLights); Effects.NormalMapFX.SetEyePosW(_camera.Position); //Effects.NormalMapFX.SetCubeMap(_sky.CubeMapSRV); if (!Util.IsKeyDown(Keys.S)) { Effects.BasicFX.SetSsaoMap(_ssao.AmbientSRV); Effects.NormalMapFX.SetSsaoMap(_ssao.AmbientSRV); } else { Effects.BasicFX.SetSsaoMap(_texMgr.CreateTexture("Textures/white.dds")); Effects.NormalMapFX.SetSsaoMap(_texMgr.CreateTexture("Textures/white.dds")); } var toTexSpace = Matrix.Scaling(0.5f, -0.5f, 1.0f) * Matrix.Translation(0.5f, 0.5f, 0); var activeTech = Effects.NormalMapFX.Light3Tech; var activeSphereTech = Effects.BasicFX.Light3ReflectTech; var activeSkullTech = Effects.BasicFX.Light3ReflectTech; ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } for (var p = 0; p < activeTech.Description.PassCount; p++) { // draw grid var pass = activeTech.GetPassByIndex(p); _grid.ToTexSpace = toTexSpace; _grid.Draw(ImmediateContext, pass, view, proj); // draw box _box.ToTexSpace = toTexSpace; _box.Draw(ImmediateContext, pass, view, proj); // draw columns foreach (var cylinder in _cylinders) { cylinder.ToTexSpace = toTexSpace; cylinder.Draw(ImmediateContext, pass, view, proj); } } ImmediateContext.HullShader.Set(null); ImmediateContext.DomainShader.Set(null); ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; for (var p = 0; p < activeSphereTech.Description.PassCount; p++) { var pass = activeSphereTech.GetPassByIndex(p); foreach (var sphere in _spheres) { sphere.ToTexSpace = toTexSpace; sphere.Draw(ImmediateContext, pass, view, proj, RenderMode.Basic); } } ImmediateContext.Rasterizer.State = null; ImmediateContext.InputAssembler.InputLayout = InputLayouts.Basic32; for (var p = 0; p < activeSkullTech.Description.PassCount; p++) { _skull.ToTexSpace = toTexSpace; _skull.Draw(ImmediateContext, activeSkullTech.GetPassByIndex(p), view, proj, RenderMode.Basic); } ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; DrawScreenQuad(_ssao.AmbientSRV); DrawScreenQuad2(_ssao.NormalDepthSRV); _sky.Draw(ImmediateContext, _camera); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; var srvs = new List <ShaderResourceView>(); for (var i = 0; i < 16; i++) { srvs.Add(null); } ImmediateContext.PixelShader.SetShaderResources(srvs.ToArray(), 0, 16); SwapChain.Present(0, PresentFlags.None); }