public override void Draw()
{
var targets = _device.GetRenderTargets();
#if PROFILE
Statistic.Create("Graphics.Primitives").Set(0);
Statistic.Create("Graphics.Draws").Set(0);
#endif
foreach (var view in _views)
{
view.Begin(this);
{
view.SetMetadata(_data);
var output = Plan.Execute();
_viewResults.Enqueue(output);
}
view.End(this);
}
if (targets.Length != 0)
_device.SetRenderTargets(targets);
else
_device.SetRenderTarget(null);
_spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
foreach (var view in _views)
{
var output = _viewResults.Dequeue();
var viewport = view.Viewport;
if (output.Image.Format.IsFloatingPoint())
_device.SamplerStates[0] = SamplerState.PointClamp;
else
_device.SamplerStates[0] = SamplerState.LinearClamp;
_spriteBatch.Draw(output.Image, viewport.Bounds, Color.White);
output.Finalise();
}
_spriteBatch.End();
base.Draw();
}