protected override void DrawInner() {
Camera.UpdateViewMatrix();
// just in case
DeviceContext.ClearRenderTargetView(_buffer0.TargetView, Color.Black);
DeviceContext.ClearRenderTargetView(_buffer1.TargetView, Color.Black);
DeviceContext.ClearRenderTargetView(RenderTargetView, Color.Transparent);
// render to buffer-0
DeviceContext.OutputMerger.SetTargets(_buffer0.TargetView);
DeviceContext.OutputMerger.BlendState = null;
DeviceContext.Rasterizer.State = DeviceContextHolder.DoubleSidedState;
FilteredNode.Draw(DeviceContextHolder, Camera, SpecialRenderMode.Simple);
DeviceContext.Rasterizer.State = null;
// blur to buffer-0 using buffer-1 as temporary
DeviceContextHolder.GetHelper<TrackMapBlurRenderHelper>().Blur(DeviceContextHolder, _buffer0, _buffer1);
// outline map and add inset shadow to buffer-1 (alpha is in green channel for optional FXAA)
DeviceContextHolder.GetHelper<TrackMapRenderHelper>().Draw(DeviceContextHolder, _buffer0.View, _buffer1.TargetView);
// move alpha from green channel to alpha-channel
if (UseFxaa) {
// applying FXAA first
DeviceContextHolder.GetHelper<FxaaHelper>().Draw(DeviceContextHolder, _buffer1.View, _buffer0.TargetView);
DeviceContextHolder.GetHelper<TrackMapRenderHelper>().Final(DeviceContextHolder, _buffer0.View, RenderTargetView, !ShotMode);
} else {
// directly
DeviceContextHolder.GetHelper<TrackMapRenderHelper>().Final(DeviceContextHolder, _buffer1.View, RenderTargetView, !ShotMode);
}
}