public void DrawScene(DeviceContextHolder holder, IShadowsDraw draw) {
holder.SaveRenderTargetAndViewport();
holder.DeviceContext.Rasterizer.SetViewports(_viewport);
holder.DeviceContext.OutputMerger.DepthStencilState = null;
holder.DeviceContext.OutputMerger.BlendState = null;
holder.DeviceContext.Rasterizer.State = _rasterizerState;
foreach (var split in Splits) {
holder.DeviceContext.OutputMerger.SetTargets(split.Buffer.DepthView);
holder.DeviceContext.ClearDepthStencilView(split.Buffer.DepthView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1f, 0);
draw.DrawSceneForShadows(holder, split.Camera);
holder.DeviceContext.GenerateMips(split.Buffer.View);
}
holder.DeviceContext.Rasterizer.State = null;
holder.DeviceContext.OutputMerger.DepthStencilState = null;
holder.RestoreRenderTargetAndViewport();
}