Create only one scratch vertex buffer for rendering.
Previously several buffers were created but only one was ever used.
This commit is contained in:
@@ -56,12 +56,11 @@ namespace OpenRA.Graphics
|
||||
renderer.Device.SetBlendMode(BlendMode.Alpha);
|
||||
shader.Render(() =>
|
||||
{
|
||||
var vb = renderer.GetTempVertexBuffer();
|
||||
vb.SetData(vertices, nv);
|
||||
renderer.SetLineWidth(LineWidth);
|
||||
renderer.DrawBatch(vb, 0, nv, PrimitiveType.LineList);
|
||||
renderer.DrawBatch(vertices, nv, PrimitiveType.LineList);
|
||||
});
|
||||
renderer.Device.SetBlendMode(BlendMode.None);
|
||||
|
||||
nv = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,12 +32,7 @@ namespace OpenRA.Graphics
|
||||
if (nv > 0)
|
||||
{
|
||||
renderer.Device.SetBlendMode(BlendMode.Alpha);
|
||||
shader.Render(() =>
|
||||
{
|
||||
var vb = renderer.GetTempVertexBuffer();
|
||||
vb.SetData(vertices, nv);
|
||||
renderer.DrawBatch(vb, 0, nv, PrimitiveType.QuadList);
|
||||
});
|
||||
shader.Render(() => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList));
|
||||
renderer.Device.SetBlendMode(BlendMode.None);
|
||||
|
||||
nv = 0;
|
||||
|
||||
@@ -32,9 +32,8 @@ namespace OpenRA.Graphics
|
||||
internal IGraphicsDevice Device { get; private set; }
|
||||
internal int SheetSize { get; private set; }
|
||||
internal int TempBufferSize { get; private set; }
|
||||
internal int TempBufferCount { get; private set; }
|
||||
|
||||
readonly Queue<IVertexBuffer<Vertex>> tempBuffers = new Queue<IVertexBuffer<Vertex>>();
|
||||
readonly IVertexBuffer<Vertex> tempBuffer;
|
||||
readonly Stack<Rectangle> scissorState = new Stack<Rectangle>();
|
||||
|
||||
SheetBuilder fontSheetBuilder;
|
||||
@@ -57,7 +56,6 @@ namespace OpenRA.Graphics
|
||||
if (!serverSettings.Dedicated)
|
||||
{
|
||||
TempBufferSize = graphicSettings.BatchSize;
|
||||
TempBufferCount = graphicSettings.NumTempBuffers;
|
||||
SheetSize = graphicSettings.SheetSize;
|
||||
}
|
||||
|
||||
@@ -70,8 +68,7 @@ namespace OpenRA.Graphics
|
||||
RgbaSpriteRenderer = new SpriteRenderer(this, Device.CreateShader("rgba"));
|
||||
SpriteRenderer = new SpriteRenderer(this, Device.CreateShader("shp"));
|
||||
|
||||
for (var i = 0; i < TempBufferCount; i++)
|
||||
tempBuffers.Enqueue(Device.CreateVertexBuffer(TempBufferSize));
|
||||
tempBuffer = Device.CreateVertexBuffer(TempBufferSize);
|
||||
}
|
||||
|
||||
static Size GetResolution(GraphicSettings graphicsSettings)
|
||||
@@ -157,6 +154,12 @@ namespace OpenRA.Graphics
|
||||
Device.Present();
|
||||
}
|
||||
|
||||
public void DrawBatch(Vertex[] vertices, int numVertices, PrimitiveType type)
|
||||
{
|
||||
tempBuffer.SetData(vertices, numVertices);
|
||||
DrawBatch(tempBuffer, 0, numVertices, type);
|
||||
}
|
||||
|
||||
public void DrawBatch<T>(IVertexBuffer<T> vertices,
|
||||
int firstVertex, int numVertices, PrimitiveType type)
|
||||
where T : struct
|
||||
@@ -178,11 +181,6 @@ namespace OpenRA.Graphics
|
||||
|
||||
public Size Resolution { get { return Device.WindowSize; } }
|
||||
|
||||
internal IVertexBuffer<Vertex> GetTempVertexBuffer()
|
||||
{
|
||||
return tempBuffers.Peek();
|
||||
}
|
||||
|
||||
public interface IBatchRenderer { void Flush(); }
|
||||
|
||||
public IBatchRenderer CurrentBatchRenderer
|
||||
@@ -259,9 +257,7 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
Device.Dispose();
|
||||
WorldVoxelRenderer.Dispose();
|
||||
foreach (var buffer in tempBuffers)
|
||||
buffer.Dispose();
|
||||
tempBuffers.Clear();
|
||||
tempBuffer.Dispose();
|
||||
if (fontSheetBuilder != null)
|
||||
fontSheetBuilder.Dispose();
|
||||
}
|
||||
|
||||
@@ -37,12 +37,7 @@ namespace OpenRA.Graphics
|
||||
shader.SetTexture("DiffuseTexture", currentSheet.GetTexture());
|
||||
|
||||
renderer.Device.SetBlendMode(currentBlend);
|
||||
shader.Render(() =>
|
||||
{
|
||||
var vb = renderer.GetTempVertexBuffer();
|
||||
vb.SetData(vertices, nv);
|
||||
renderer.DrawBatch(vb, 0, nv, PrimitiveType.QuadList);
|
||||
});
|
||||
shader.Render(() => renderer.DrawBatch(vertices, nv, PrimitiveType.QuadList));
|
||||
renderer.Device.SetBlendMode(BlendMode.None);
|
||||
|
||||
nv = 0;
|
||||
|
||||
@@ -89,7 +89,6 @@ namespace OpenRA
|
||||
public int MaxFramerate = 60;
|
||||
|
||||
public int BatchSize = 8192;
|
||||
public int NumTempBuffers = 8;
|
||||
public int SheetSize = 2048;
|
||||
|
||||
public string Language = "english";
|
||||
|
||||
Reference in New Issue
Block a user