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
using System;
using System.Linq;
using OpenRA.Primitives;
namespace OpenRA.Graphics
{
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 IShader shader;
readonly Vertex[] vertices;
readonly Sheet[] sheets = new Sheet[7];
readonly Sheet[] sheets = new Sheet[SheetCount];
BlendMode currentBlend = BlendMode.Alpha;
int nv = 0;
@@ -39,7 +43,7 @@ namespace OpenRA.Graphics
{
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;
}

View File

@@ -309,7 +309,10 @@ namespace OpenRA.Mods.Common.Traits
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
// by index in reverse to avoid issues with index reassignment

View File

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