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