Save some perf.
This commit is contained in:
@@ -138,14 +138,22 @@ namespace OpenRA.Graphics
|
|||||||
return new Rectangle(left, top, right - left, bottom - top);
|
return new Rectangle(left, top, right - left, bottom - top);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int2 cachedScroll = new int2(int.MaxValue, int.MaxValue);
|
||||||
|
Rectangle cachedRect;
|
||||||
|
|
||||||
public Rectangle WorldBounds(World world)
|
public Rectangle WorldBounds(World world)
|
||||||
{
|
{
|
||||||
int2 boundary = new int2(1,1); // Add a curtain of cells around the viewport to account for rounding errors
|
if (cachedScroll != scrollPosition)
|
||||||
var tl = ViewToWorld(int2.Zero).ToInt2() - boundary;
|
{
|
||||||
var br = ViewToWorld(new int2(Width, Height)).ToInt2() + boundary;
|
int2 boundary = new int2(1,1); // Add a curtain of cells around the viewport to account for rounding errors
|
||||||
var view = Rectangle.Intersect(Rectangle.FromLTRB(tl.X, tl.Y, br.X, br.Y), world.Map.Bounds);
|
var tl = ViewToWorld(int2.Zero).ToInt2() - boundary;
|
||||||
|
var br = ViewToWorld(new int2(Width, Height)).ToInt2() + boundary;
|
||||||
|
cachedRect = Rectangle.Intersect(Rectangle.FromLTRB(tl.X, tl.Y, br.X, br.Y), world.Map.Bounds);
|
||||||
|
cachedScroll = scrollPosition;
|
||||||
|
}
|
||||||
|
|
||||||
var b = world.LocalShroud.Bounds;
|
var b = world.LocalShroud.Bounds;
|
||||||
return (b.HasValue) ? Rectangle.Intersect(view, b.Value) : view;
|
return (b.HasValue) ? Rectangle.Intersect(cachedRect, b.Value) : cachedRect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,9 +128,11 @@ namespace OpenRA
|
|||||||
for (var j = clip.Top; j < clip.Bottom; j++)
|
for (var j = clip.Top; j < clip.Bottom; j++)
|
||||||
{
|
{
|
||||||
var starti = clip.Left;
|
var starti = clip.Left;
|
||||||
|
var last = shadowBits[0x0f];
|
||||||
for (var i = clip.Left; i < clip.Right; i++)
|
for (var i = clip.Left; i < clip.Right; i++)
|
||||||
{
|
{
|
||||||
if (s[i, j] == shadowBits[0x0f])
|
if ((s[i, j] == shadowBits[0x0f] && last == shadowBits[0x0f])
|
||||||
|
|| (s[i, j] == shadowBits[0] && last == shadowBits[0]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (starti != i)
|
if (starti != i)
|
||||||
@@ -146,6 +148,7 @@ namespace OpenRA
|
|||||||
Game.CellSize * new float2(i, j),
|
Game.CellSize * new float2(i, j),
|
||||||
shroudPalette);
|
shroudPalette);
|
||||||
starti = i + 1;
|
starti = i + 1;
|
||||||
|
last = s[i, j];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (starti < clip.Right)
|
if (starti < clip.Right)
|
||||||
|
|||||||
Reference in New Issue
Block a user