Cache the simpler delegates used in IShader.Render calls.
This commit is contained in:
@@ -20,6 +20,7 @@ namespace OpenRA.Graphics
|
|||||||
|
|
||||||
readonly Renderer renderer;
|
readonly Renderer renderer;
|
||||||
readonly IShader shader;
|
readonly IShader shader;
|
||||||
|
readonly Action renderAction;
|
||||||
|
|
||||||
readonly Vertex[] vertices;
|
readonly Vertex[] vertices;
|
||||||
int nv = 0;
|
int nv = 0;
|
||||||
@@ -31,6 +32,11 @@ namespace OpenRA.Graphics
|
|||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
this.shader = shader;
|
this.shader = shader;
|
||||||
vertices = new Vertex[renderer.TempBufferSize];
|
vertices = new Vertex[renderer.TempBufferSize];
|
||||||
|
renderAction = () =>
|
||||||
|
{
|
||||||
|
renderer.SetLineWidth(LineWidth);
|
||||||
|
renderer.DrawBatch(vertices, nv, PrimitiveType.LineList);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public float LineWidth
|
public float LineWidth
|
||||||
@@ -54,11 +60,7 @@ namespace OpenRA.Graphics
|
|||||||
if (nv > 0)
|
if (nv > 0)
|
||||||
{
|
{
|
||||||
renderer.Device.SetBlendMode(BlendMode.Alpha);
|
renderer.Device.SetBlendMode(BlendMode.Alpha);
|
||||||
shader.Render(() =>
|
shader.Render(renderAction);
|
||||||
{
|
|
||||||
renderer.SetLineWidth(LineWidth);
|
|
||||||
renderer.DrawBatch(vertices, nv, PrimitiveType.LineList);
|
|
||||||
});
|
|
||||||
renderer.Device.SetBlendMode(BlendMode.None);
|
renderer.Device.SetBlendMode(BlendMode.None);
|
||||||
|
|
||||||
nv = 0;
|
nv = 0;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
|
||||||
namespace OpenRA.Graphics
|
namespace OpenRA.Graphics
|
||||||
@@ -16,6 +17,7 @@ namespace OpenRA.Graphics
|
|||||||
{
|
{
|
||||||
readonly Renderer renderer;
|
readonly Renderer renderer;
|
||||||
readonly IShader shader;
|
readonly IShader shader;
|
||||||
|
readonly Action renderAction;
|
||||||
|
|
||||||
readonly Vertex[] vertices;
|
readonly Vertex[] vertices;
|
||||||
int nv = 0;
|
int nv = 0;
|
||||||
@@ -25,6 +27,7 @@ namespace OpenRA.Graphics
|
|||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
this.shader = shader;
|
this.shader = shader;
|
||||||
vertices = new Vertex[renderer.TempBufferSize];
|
vertices = new Vertex[renderer.TempBufferSize];
|
||||||
|
renderAction = () => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Flush()
|
public void Flush()
|
||||||
@@ -32,7 +35,7 @@ namespace OpenRA.Graphics
|
|||||||
if (nv > 0)
|
if (nv > 0)
|
||||||
{
|
{
|
||||||
renderer.Device.SetBlendMode(BlendMode.Alpha);
|
renderer.Device.SetBlendMode(BlendMode.Alpha);
|
||||||
shader.Render(() => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList));
|
shader.Render(renderAction);
|
||||||
renderer.Device.SetBlendMode(BlendMode.None);
|
renderer.Device.SetBlendMode(BlendMode.None);
|
||||||
|
|
||||||
nv = 0;
|
nv = 0;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ namespace OpenRA.Graphics
|
|||||||
{
|
{
|
||||||
readonly Renderer renderer;
|
readonly Renderer renderer;
|
||||||
readonly IShader shader;
|
readonly IShader shader;
|
||||||
|
readonly Action renderAction;
|
||||||
|
|
||||||
readonly Vertex[] vertices;
|
readonly Vertex[] vertices;
|
||||||
Sheet currentSheet;
|
Sheet currentSheet;
|
||||||
@@ -28,6 +29,7 @@ namespace OpenRA.Graphics
|
|||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
this.shader = shader;
|
this.shader = shader;
|
||||||
vertices = new Vertex[renderer.TempBufferSize];
|
vertices = new Vertex[renderer.TempBufferSize];
|
||||||
|
renderAction = () => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Flush()
|
public void Flush()
|
||||||
@@ -37,7 +39,7 @@ namespace OpenRA.Graphics
|
|||||||
shader.SetTexture("DiffuseTexture", currentSheet.GetTexture());
|
shader.SetTexture("DiffuseTexture", currentSheet.GetTexture());
|
||||||
|
|
||||||
renderer.Device.SetBlendMode(currentBlend);
|
renderer.Device.SetBlendMode(currentBlend);
|
||||||
shader.Render(() => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList));
|
shader.Render(renderAction);
|
||||||
renderer.Device.SetBlendMode(BlendMode.None);
|
renderer.Device.SetBlendMode(BlendMode.None);
|
||||||
|
|
||||||
nv = 0;
|
nv = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user