Disabled convexhull shadow caching

This commit is contained in:
Regalis
2017-02-25 21:50:11 +02:00
parent 844097b132
commit bcabe4ab39
+13 -35
View File
@@ -7,7 +7,7 @@ using System.Linq;
namespace Barotrauma.Lights namespace Barotrauma.Lights
{ {
class CachedShadow : IDisposable /*class CachedShadow : IDisposable
{ {
public VertexBuffer ShadowBuffer; public VertexBuffer ShadowBuffer;
@@ -40,7 +40,7 @@ namespace Barotrauma.Lights
{ {
ShadowBuffer.Dispose(); ShadowBuffer.Dispose();
} }
} }*/
class ConvexHullList class ConvexHullList
{ {
@@ -71,7 +71,9 @@ namespace Barotrauma.Lights
static BasicEffect shadowEffect; static BasicEffect shadowEffect;
static BasicEffect penumbraEffect; static BasicEffect penumbraEffect;
private Dictionary<LightSource, CachedShadow> cachedShadows; //private Dictionary<LightSource, CachedShadow> cachedShadows;
public VertexBuffer ShadowBuffer;
private Vector2[] vertices; private Vector2[] vertices;
private Vector2[] losVertices; private Vector2[] losVertices;
@@ -124,7 +126,7 @@ namespace Barotrauma.Lights
parentEntity = parent; parentEntity = parent;
cachedShadows = new Dictionary<LightSource, CachedShadow>(); //cachedShadows = new Dictionary<LightSource, CachedShadow>();
shadowVertices = new VertexPositionColor[6 * 2]; shadowVertices = new VertexPositionColor[6 * 2];
penumbraVertices = new VertexPositionTexture[6]; penumbraVertices = new VertexPositionTexture[6];
@@ -191,8 +193,6 @@ namespace Barotrauma.Lights
public void Move(Vector2 amount) public void Move(Vector2 amount)
{ {
ClearCachedShadows();
for (int i = 0; i < vertices.Length; i++) for (int i = 0; i < vertices.Length; i++)
{ {
vertices[i] += amount; vertices[i] += amount;
@@ -204,8 +204,6 @@ namespace Barotrauma.Lights
public void SetVertices(Vector2[] points) public void SetVertices(Vector2[] points)
{ {
ClearCachedShadows();
vertices = points; vertices = points;
losVertices = points; losVertices = points;
@@ -231,7 +229,7 @@ namespace Barotrauma.Lights
CalculateDimensions(); CalculateDimensions();
} }
private void RemoveCachedShadow(Lights.LightSource light) /*private void RemoveCachedShadow(Lights.LightSource light)
{ {
CachedShadow shadow = null; CachedShadow shadow = null;
cachedShadows.TryGetValue(light, out shadow); cachedShadows.TryGetValue(light, out shadow);
@@ -251,7 +249,7 @@ namespace Barotrauma.Lights
cachedShadow.Value.Dispose(); cachedShadow.Value.Dispose();
} }
cachedShadows.Clear(); cachedShadows.Clear();
} }*/
public bool Intersects(Rectangle rect) public bool Intersects(Rectangle rect)
{ {
@@ -469,28 +467,12 @@ namespace Barotrauma.Lights
} }
CachedShadow cachedShadow = null; CalculateShadowVertices(lightSourcePos, los);
if (!cachedShadows.TryGetValue(light, out cachedShadow) || ShadowBuffer = new VertexBuffer(GameMain.CurrGraphicsDevice, VertexPositionColor.VertexDeclaration, 6 * 2, BufferUsage.None);
Vector2.DistanceSquared(lightSourcePos, cachedShadow.LightPos) > 1.0f) ShadowBuffer.SetData(shadowVertices, 0, shadowVertices.Length);
{
CalculateShadowVertices(lightSourcePos, los);
if (cachedShadow != null) graphicsDevice.SetVertexBuffer(ShadowBuffer);
{ shadowVertexCount = shadowVertices.Length;
cachedShadow.LightPos = lightSourcePos;
cachedShadow.ShadowBuffer.SetData(shadowVertices, 0, shadowVertices.Length);
cachedShadow.ShadowVertexCount = shadowVertexCount;
}
else
{
cachedShadow = new CachedShadow(shadowVertices, lightSourcePos, shadowVertexCount, 0);
RemoveCachedShadow(light);
cachedShadows.Add(light, cachedShadow);
}
}
graphicsDevice.SetVertexBuffer(cachedShadow.ShadowBuffer);
shadowVertexCount = cachedShadow.ShadowVertexCount;
DrawShadows(graphicsDevice, cam, transform, los); DrawShadows(graphicsDevice, cam, transform, los);
} }
@@ -546,8 +528,6 @@ namespace Barotrauma.Lights
public void Remove() public void Remove()
{ {
ClearCachedShadows();
var chList = HullLists.Find(x => x.Submarine == parentEntity.Submarine); var chList = HullLists.Find(x => x.Submarine == parentEntity.Submarine);
if (chList != null) if (chList != null)
@@ -559,8 +539,6 @@ namespace Barotrauma.Lights
} }
} }
} }
} }
} }