diff --git a/OpenRA.Game/Graphics/ModelRenderer.cs b/OpenRA.Game/Graphics/ModelRenderer.cs index eeceef210b..96d5a2bdf0 100644 --- a/OpenRA.Game/Graphics/ModelRenderer.cs +++ b/OpenRA.Game/Graphics/ModelRenderer.cs @@ -278,7 +278,8 @@ namespace OpenRA.Graphics shader.SetVec("AmbientLight", ambientLight, 3); shader.SetVec("DiffuseLight", diffuseLight, 3); - shader.Render(() => renderer.DrawBatch(cache.VertexBuffer, renderData.Start, renderData.Count, PrimitiveType.TriangleList)); + shader.PrepareRender(); + renderer.DrawBatch(cache.VertexBuffer, renderData.Start, renderData.Count, PrimitiveType.TriangleList); } public void BeginFrame() diff --git a/OpenRA.Game/Graphics/PlatformInterfaces.cs b/OpenRA.Game/Graphics/PlatformInterfaces.cs index 12a2259ab7..fe1ffcc450 100644 --- a/OpenRA.Game/Graphics/PlatformInterfaces.cs +++ b/OpenRA.Game/Graphics/PlatformInterfaces.cs @@ -89,7 +89,7 @@ namespace OpenRA void SetVec(string name, float[] vec, int length); void SetTexture(string param, ITexture texture); void SetMatrix(string param, float[] mtx); - void Render(Action a); + void PrepareRender(); } public enum TextureScaleFilter { Nearest, Linear } diff --git a/OpenRA.Game/Graphics/SpriteRenderer.cs b/OpenRA.Game/Graphics/SpriteRenderer.cs index 4b29b19967..07e1c74654 100644 --- a/OpenRA.Game/Graphics/SpriteRenderer.cs +++ b/OpenRA.Game/Graphics/SpriteRenderer.cs @@ -18,7 +18,6 @@ namespace OpenRA.Graphics { readonly Renderer renderer; readonly IShader shader; - readonly Action renderAction; readonly Vertex[] vertices; Sheet currentSheet; @@ -30,7 +29,6 @@ namespace OpenRA.Graphics this.renderer = renderer; this.shader = shader; vertices = new Vertex[renderer.TempBufferSize]; - renderAction = () => renderer.DrawBatch(vertices, nv, PrimitiveType.TriangleList); } public void Flush() @@ -41,7 +39,8 @@ namespace OpenRA.Graphics shader.SetTexture("DiffuseTexture", currentSheet.GetTexture()); renderer.Device.SetBlendMode(currentBlend); - shader.Render(renderAction); + shader.PrepareRender(); + renderer.DrawBatch(vertices, nv, PrimitiveType.TriangleList); renderer.Device.SetBlendMode(BlendMode.None); nv = 0; @@ -106,7 +105,8 @@ namespace OpenRA.Graphics { shader.SetTexture("DiffuseTexture", sheet.GetTexture()); renderer.Device.SetBlendMode(blendMode); - shader.Render(() => renderer.DrawBatch(buffer, start, length, type)); + shader.PrepareRender(); + renderer.DrawBatch(buffer, start, length, type); renderer.Device.SetBlendMode(BlendMode.None); } diff --git a/OpenRA.Platforms.Default/Shader.cs b/OpenRA.Platforms.Default/Shader.cs index 3517948f80..a373054887 100644 --- a/OpenRA.Platforms.Default/Shader.cs +++ b/OpenRA.Platforms.Default/Shader.cs @@ -130,7 +130,7 @@ namespace OpenRA.Platforms.Default } } - public void Render(Action a) + public void PrepareRender() { VerifyThreadAffinity(); OpenGL.glUseProgram(program); @@ -143,8 +143,6 @@ namespace OpenRA.Platforms.Default } OpenGL.CheckGLError(); - a(); - OpenGL.CheckGLError(); } public void SetTexture(string name, ITexture t)