Change Shader.Render to Shader.PrepareRender.

Instead of running the shader operation as an action, just run it after the shader is prepared.
This commit is contained in:
RoosterDragon
2018-04-26 21:18:14 +01:00
committed by Paul Chote
parent 95ac1aa5b2
commit 8ec90525e3
4 changed files with 8 additions and 9 deletions

View File

@@ -278,7 +278,8 @@ namespace OpenRA.Graphics
shader.SetVec("AmbientLight", ambientLight, 3); shader.SetVec("AmbientLight", ambientLight, 3);
shader.SetVec("DiffuseLight", diffuseLight, 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() public void BeginFrame()

View File

@@ -89,7 +89,7 @@ namespace OpenRA
void SetVec(string name, float[] vec, int length); void SetVec(string name, float[] vec, int length);
void SetTexture(string param, ITexture texture); void SetTexture(string param, ITexture texture);
void SetMatrix(string param, float[] mtx); void SetMatrix(string param, float[] mtx);
void Render(Action a); void PrepareRender();
} }
public enum TextureScaleFilter { Nearest, Linear } public enum TextureScaleFilter { Nearest, Linear }

View File

@@ -18,7 +18,6 @@ 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;
@@ -30,7 +29,6 @@ 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.TriangleList);
} }
public void Flush() public void Flush()
@@ -41,7 +39,8 @@ namespace OpenRA.Graphics
shader.SetTexture("DiffuseTexture", currentSheet.GetTexture()); shader.SetTexture("DiffuseTexture", currentSheet.GetTexture());
renderer.Device.SetBlendMode(currentBlend); renderer.Device.SetBlendMode(currentBlend);
shader.Render(renderAction); shader.PrepareRender();
renderer.DrawBatch(vertices, nv, PrimitiveType.TriangleList);
renderer.Device.SetBlendMode(BlendMode.None); renderer.Device.SetBlendMode(BlendMode.None);
nv = 0; nv = 0;
@@ -106,7 +105,8 @@ namespace OpenRA.Graphics
{ {
shader.SetTexture("DiffuseTexture", sheet.GetTexture()); shader.SetTexture("DiffuseTexture", sheet.GetTexture());
renderer.Device.SetBlendMode(blendMode); 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); renderer.Device.SetBlendMode(BlendMode.None);
} }

View File

@@ -130,7 +130,7 @@ namespace OpenRA.Platforms.Default
} }
} }
public void Render(Action a) public void PrepareRender()
{ {
VerifyThreadAffinity(); VerifyThreadAffinity();
OpenGL.glUseProgram(program); OpenGL.glUseProgram(program);
@@ -143,8 +143,6 @@ namespace OpenRA.Platforms.Default
} }
OpenGL.CheckGLError(); OpenGL.CheckGLError();
a();
OpenGL.CheckGLError();
} }
public void SetTexture(string name, ITexture t) public void SetTexture(string name, ITexture t)