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:
committed by
Paul Chote
parent
95ac1aa5b2
commit
8ec90525e3
@@ -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()
|
||||||
|
|||||||
@@ -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 }
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user