protected override void DrawInner() {
base.DrawInner();
switch (Mode) {
case RenderingMode.Result:
DeviceContext.ClearDepthStencilView(_temporaryDepthBuffer.DepthView,
DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0);
DeviceContext.OutputMerger.SetTargets(_temporaryDepthBuffer.DepthView);
DeviceContext.OutputMerger.BlendState = null;
Scene.Draw(DeviceContextHolder, Camera, SpecialRenderMode.DeferredTransparentMask);
DrawLights(_temporaryBuffer0, _temporaryDepthBuffer.DepthView);
if (UseLocalReflections) {
DrawReflections(_temporaryBuffer2, BlurLocalReflections ? _temporaryBuffer1 : null, _temporaryBuffer0,
_temporaryDepthBuffer.DepthView);
}
CombineResult(_temporaryBuffer1, _temporaryBuffer0, UseLocalReflections ? _temporaryBuffer2 : null, null,
_temporaryDepthBuffer.DepthView);
DrawTransparent();
ProcessHdr(_temporaryBuffer0, _temporaryBuffer2, _temporaryBuffer3);
FinalStep(_temporaryBuffer0);
break;
case RenderingMode.WithoutTransparent:
DrawLights(_temporaryBuffer0);
DrawReflections(_temporaryBuffer2, BlurLocalReflections ? _temporaryBuffer1 : null, _temporaryBuffer0);
CombineResult(_temporaryBuffer1, _temporaryBuffer0, _temporaryBuffer2);
ProcessHdr(_temporaryBuffer0, _temporaryBuffer1, _temporaryBuffer3);
FinalStep(_temporaryBuffer0);
break;
case RenderingMode.DebugGBuffer:
CombineResult(_temporaryBuffer0, null, null);
FinalStep(_temporaryBuffer0);
return;
case RenderingMode.DebugLighting:
DrawLights(_temporaryBuffer0);
FinalStep(_temporaryBuffer0, _sunShadows.Splits[0].Buffer);
break;
case RenderingMode.DebugLocalReflections:
case RenderingMode.DebugPostEffects:
DrawLights(_temporaryBuffer0);
DrawReflections(_temporaryBuffer2, BlurLocalReflections ? _temporaryBuffer1 : null, _temporaryBuffer0);
CombineResult(_temporaryBuffer1, _temporaryBuffer0, _temporaryBuffer2);
FinalStep(_temporaryBuffer1);
return;
default:
throw new ArgumentOutOfRangeException();
}
}