diff --git a/OpenRA.Game/Graphics/LineRenderer.cs b/OpenRA.Game/Graphics/LineRenderer.cs index c8390fc54a..a3379a3469 100644 --- a/OpenRA.Game/Graphics/LineRenderer.cs +++ b/OpenRA.Game/Graphics/LineRenderer.cs @@ -20,6 +20,7 @@ namespace OpenRA.Graphics readonly Renderer renderer; readonly IShader shader; + readonly Action renderAction; readonly Vertex[] vertices; int nv = 0; @@ -31,6 +32,11 @@ namespace OpenRA.Graphics this.renderer = renderer; this.shader = shader; vertices = new Vertex[renderer.TempBufferSize]; + renderAction = () => + { + renderer.SetLineWidth(LineWidth); + renderer.DrawBatch(vertices, nv, PrimitiveType.LineList); + }; } public float LineWidth @@ -54,11 +60,7 @@ namespace OpenRA.Graphics if (nv > 0) { renderer.Device.SetBlendMode(BlendMode.Alpha); - shader.Render(() => - { - renderer.SetLineWidth(LineWidth); - renderer.DrawBatch(vertices, nv, PrimitiveType.LineList); - }); + shader.Render(renderAction); renderer.Device.SetBlendMode(BlendMode.None); nv = 0; diff --git a/OpenRA.Game/Graphics/QuadRenderer.cs b/OpenRA.Game/Graphics/QuadRenderer.cs index a9e1356677..39733df5a6 100644 --- a/OpenRA.Game/Graphics/QuadRenderer.cs +++ b/OpenRA.Game/Graphics/QuadRenderer.cs @@ -8,6 +8,7 @@ */ #endregion +using System; using System.Drawing; namespace OpenRA.Graphics @@ -16,6 +17,7 @@ namespace OpenRA.Graphics { readonly Renderer renderer; readonly IShader shader; + readonly Action renderAction; readonly Vertex[] vertices; int nv = 0; @@ -25,6 +27,7 @@ namespace OpenRA.Graphics this.renderer = renderer; this.shader = shader; vertices = new Vertex[renderer.TempBufferSize]; + renderAction = () => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList); } public void Flush() @@ -32,7 +35,7 @@ namespace OpenRA.Graphics if (nv > 0) { renderer.Device.SetBlendMode(BlendMode.Alpha); - shader.Render(() => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList)); + shader.Render(renderAction); renderer.Device.SetBlendMode(BlendMode.None); nv = 0; diff --git a/OpenRA.Game/Graphics/SpriteRenderer.cs b/OpenRA.Game/Graphics/SpriteRenderer.cs index 6a4cf063ee..4712661ead 100644 --- a/OpenRA.Game/Graphics/SpriteRenderer.cs +++ b/OpenRA.Game/Graphics/SpriteRenderer.cs @@ -17,6 +17,7 @@ namespace OpenRA.Graphics { readonly Renderer renderer; readonly IShader shader; + readonly Action renderAction; readonly Vertex[] vertices; Sheet currentSheet; @@ -28,6 +29,7 @@ namespace OpenRA.Graphics this.renderer = renderer; this.shader = shader; vertices = new Vertex[renderer.TempBufferSize]; + renderAction = () => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList); } public void Flush() @@ -37,7 +39,7 @@ namespace OpenRA.Graphics shader.SetTexture("DiffuseTexture", currentSheet.GetTexture()); renderer.Device.SetBlendMode(currentBlend); - shader.Render(() => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList)); + shader.Render(renderAction); renderer.Device.SetBlendMode(BlendMode.None); nv = 0;