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