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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user