Cache the simpler delegates used in IShader.Render calls.

This commit is contained in:
RoosterDragon
2015-07-15 21:09:11 +01:00
parent 3a0eb5554e
commit 92389916a6
3 changed files with 14 additions and 7 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;