Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 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);
 }
Exemplo n.º 9
0
        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);
 }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
        }