From 1e60a0ca76e10c53c477504b1e7725cffb91d46b Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Wed, 20 May 2015 20:02:23 +0100 Subject: [PATCH] Create only one scratch vertex buffer for rendering. Previously several buffers were created but only one was ever used. --- OpenRA.Game/Graphics/LineRenderer.cs | 5 ++--- OpenRA.Game/Graphics/QuadRenderer.cs | 7 +------ OpenRA.Game/Graphics/Renderer.cs | 22 +++++++++------------- OpenRA.Game/Graphics/SpriteRenderer.cs | 7 +------ OpenRA.Game/Settings.cs | 1 - 5 files changed, 13 insertions(+), 29 deletions(-) diff --git a/OpenRA.Game/Graphics/LineRenderer.cs b/OpenRA.Game/Graphics/LineRenderer.cs index 75260e484b..c8390fc54a 100644 --- a/OpenRA.Game/Graphics/LineRenderer.cs +++ b/OpenRA.Game/Graphics/LineRenderer.cs @@ -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; } } diff --git a/OpenRA.Game/Graphics/QuadRenderer.cs b/OpenRA.Game/Graphics/QuadRenderer.cs index edec7ecd3f..a9e1356677 100644 --- a/OpenRA.Game/Graphics/QuadRenderer.cs +++ b/OpenRA.Game/Graphics/QuadRenderer.cs @@ -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; diff --git a/OpenRA.Game/Graphics/Renderer.cs b/OpenRA.Game/Graphics/Renderer.cs index 1dac9e3b80..eaa5f5d337 100644 --- a/OpenRA.Game/Graphics/Renderer.cs +++ b/OpenRA.Game/Graphics/Renderer.cs @@ -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> tempBuffers = new Queue>(); + readonly IVertexBuffer tempBuffer; readonly Stack scissorState = new Stack(); 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(IVertexBuffer 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 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(); } diff --git a/OpenRA.Game/Graphics/SpriteRenderer.cs b/OpenRA.Game/Graphics/SpriteRenderer.cs index 4331e7ef29..6a4cf063ee 100644 --- a/OpenRA.Game/Graphics/SpriteRenderer.cs +++ b/OpenRA.Game/Graphics/SpriteRenderer.cs @@ -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; diff --git a/OpenRA.Game/Settings.cs b/OpenRA.Game/Settings.cs index c6e890b847..36b0101df0 100644 --- a/OpenRA.Game/Settings.cs +++ b/OpenRA.Game/Settings.cs @@ -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";