Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="shadowView"></param>
        /// <param name="shadowProjection"></param>
        /// <param name="depthBuffer"></param>
        public void RenderShadowMapCascade(LightRenderer.ShadowRenderContext shadowRenderCtxt)
        {
            if (surfaceShader == null)
            {
                return;
            }

            var device = Game.GraphicsDevice;

            var cbData = new CBSurfaceData();

            var viewPosition   = Matrix.Invert(shadowRenderCtxt.ShadowView).TranslationVector;
            var worldMatricies = new Matrix[scene.Nodes.Count];

            scene.CopyAbsoluteTransformsTo(worldMatricies);

            device.SetTargets(shadowRenderCtxt.DepthBuffer, shadowRenderCtxt.ColorBuffer);
            device.SetViewport(shadowRenderCtxt.ShadowViewport);

            device.PipelineState = factory[(int)SurfaceFlags.SHADOW];

            device.PixelShaderConstants[0]  = constBuffer;
            device.VertexShaderConstants[0] = constBuffer;
            device.PixelShaderSamplers[0]   = SamplerState.AnisotropicWrap;


            cbData.Projection   = shadowRenderCtxt.ShadowProjection;
            cbData.View         = shadowRenderCtxt.ShadowView;
            cbData.BiasSlopeFar = new Vector4(shadowRenderCtxt.DepthBias, shadowRenderCtxt.SlopeBias, shadowRenderCtxt.FarDistance, 0);


            for (int i = 0; i < scene.Nodes.Count; i++)
            {
                var node = scene.Nodes[i];

                if (node.MeshIndex == -1)
                {
                    continue;
                }

                var mesh = scene.Meshes[node.MeshIndex];

                cbData.World = worldMatricies[i];

                constBuffer.SetData(cbData);

                device.SetupVertexInput(vertexBuffers[node.MeshIndex], indexBuffers[node.MeshIndex]);
                device.DrawIndexed(mesh.IndexCount, 0, 0);
            }
        }
Beispiel #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="shadowView"></param>
 /// <param name="shadowProjection"></param>
 /// <param name="depthBuffer"></param>
 public void RenderShadowMapSpot(LightRenderer.ShadowRenderContext shadowRenderCtxt)
 {
 }