Misc changes to reduce allocation:

- Avoid creating new strings in SpriteRenderer.Flush.
- ProductionQueue.CancelUnbuildableItems can exit early if the queue is empty. It can also use a set of names for quicker lookups.
- OpenGL.CheckGLError avoids a Enum.HasFlag call.
This commit is contained in:
RoosterDragon
2020-10-11 12:02:19 +01:00
committed by abcdefg30
parent c23efea402
commit e11c8436bd
3 changed files with 11 additions and 4 deletions

View File

@@ -10,17 +10,21 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Primitives; using OpenRA.Primitives;
namespace OpenRA.Graphics namespace OpenRA.Graphics
{ {
public class SpriteRenderer : Renderer.IBatchRenderer public class SpriteRenderer : Renderer.IBatchRenderer
{ {
const int SheetCount = 7;
static readonly string[] SheetIndexToTextureName = Exts.MakeArray(SheetCount, i => "Texture{0}".F(i));
readonly Renderer renderer; readonly Renderer renderer;
readonly IShader shader; readonly IShader shader;
readonly Vertex[] vertices; readonly Vertex[] vertices;
readonly Sheet[] sheets = new Sheet[7]; readonly Sheet[] sheets = new Sheet[SheetCount];
BlendMode currentBlend = BlendMode.Alpha; BlendMode currentBlend = BlendMode.Alpha;
int nv = 0; int nv = 0;
@@ -39,7 +43,7 @@ namespace OpenRA.Graphics
{ {
for (var i = 0; i < ns; i++) for (var i = 0; i < ns; i++)
{ {
shader.SetTexture("Texture{0}".F(i), sheets[i].GetTexture()); shader.SetTexture(SheetIndexToTextureName[i], sheets[i].GetTexture());
sheets[i] = null; sheets[i] = null;
} }

View File

@@ -309,7 +309,10 @@ namespace OpenRA.Mods.Common.Traits
protected void CancelUnbuildableItems() protected void CancelUnbuildableItems()
{ {
var buildableNames = BuildableItems().Select(b => b.Name).ToList(); if (Queue.Count == 0)
return;
var buildableNames = BuildableItems().Select(b => b.Name).ToHashSet();
// EndProduction removes the item from the queue, so we enumerate // EndProduction removes the item from the queue, so we enumerate
// by index in reverse to avoid issues with index reassignment // by index in reverse to avoid issues with index reassignment

View File

@@ -740,7 +740,7 @@ namespace OpenRA.Platforms.Default
public static void CheckGLError() public static void CheckGLError()
{ {
// Let the debug message handler log the errors instead. // Let the debug message handler log the errors instead.
if (Features.HasFlag(GLFeatures.DebugMessagesCallback)) if ((Features & GLFeatures.DebugMessagesCallback) == GLFeatures.DebugMessagesCallback)
return; return;
var type = glGetError(); var type = glGetError();