Remove lite stuff from Clyde.

This commit is contained in:
Pieter-Jan Briers
2019-12-17 19:25:05 +01:00
parent 99f96aee27
commit 6c0c395dc7
5 changed files with 114 additions and 125 deletions

View File

@@ -110,120 +110,117 @@ namespace Robust.Client.Graphics.Clyde
}
}
if (!_lite)
RenderOverlays(OverlaySpace.ScreenSpaceBelowWorld);
_setSpace(CurrentSpace.WorldSpace);
// Calculate world-space AABB for camera, to cull off-screen things.
var eye = _eyeManager.CurrentEye;
var worldBounds = Box2.CenteredAround(eye.Position.Position,
_screenSize / EyeManager.PIXELSPERMETER * eye.Zoom);
using (DebugGroup("Lights"))
{
RenderOverlays(OverlaySpace.ScreenSpaceBelowWorld);
_setSpace(CurrentSpace.WorldSpace);
// Calculate world-space AABB for camera, to cull off-screen things.
var eye = _eyeManager.CurrentEye;
var worldBounds = Box2.CenteredAround(eye.Position.Position,
_screenSize / EyeManager.PIXELSPERMETER * eye.Zoom);
using (DebugGroup("Lights"))
{
_drawLights(worldBounds);
}
using (DebugGroup("Grids"))
{
_drawGrids(worldBounds);
}
using (DebugGroup("Entities"))
{
_sortingSpritesList.Clear();
var map = _eyeManager.CurrentMap;
// So we could calculate the correct size of the entities based on the contents of their sprite...
// Or we can just assume that no entity is larger than 10x10 and get a stupid easy check.
// TODO: Make this check more accurate.
var widerBounds = worldBounds.Enlarged(5);
foreach (var sprite in _componentManager.GetAllComponents<SpriteComponent>())
{
var entity = sprite.Owner;
if (!entity.Transform.IsMapTransform || entity.Transform.MapID != map ||
!widerBounds.Contains(entity.Transform.WorldPosition) || !sprite.Visible)
{
continue;
}
_sortingSpritesList.Add(sprite);
}
_sortingSpritesList.Sort((a, b) =>
{
var cmp = ((int) a.DrawDepth).CompareTo((int) b.DrawDepth);
if (cmp != 0)
{
return cmp;
}
cmp = a.RenderOrder.CompareTo(b.RenderOrder);
if (cmp != 0)
{
return cmp;
}
return a.Owner.Uid.CompareTo(b.Owner.Uid);
});
foreach (var sprite in _sortingSpritesList)
{
Vector2i roundedPos = default;
if (sprite.PostShader != null)
{
_renderHandle.UseRenderTarget(EntityPostRenderTarget);
_renderHandle.Clear(new Color());
// Calculate viewport so that the entity thinks it's drawing to the same position,
// which is necessary for light application,
// but it's ACTUALLY drawing into the center of the render target.
var spritePos = sprite.Owner.Transform.WorldPosition;
var screenPos = _eyeManager.WorldToScreen(spritePos);
var (roundedX, roundedY) = roundedPos = (Vector2i) screenPos;
var flippedPos = new Vector2i(roundedX, ScreenSize.Y - roundedY);
flippedPos -= EntityPostRenderTarget.Size / 2;
_renderHandle.Viewport(Box2i.FromDimensions(-flippedPos, ScreenSize));
}
sprite.OpenGLRender(_renderHandle.DrawingHandleWorld);
if (sprite.PostShader != null)
{
_renderHandle.UseRenderTarget(null);
_renderHandle.Viewport(Box2i.FromDimensions(Vector2i.Zero, ScreenSize));
_renderHandle.UseShader(sprite.PostShader);
_renderHandle.SetSpace(CurrentSpace.ScreenSpace);
_renderHandle.SetModelTransform(Matrix3.Identity);
var rounded = roundedPos - EntityPostRenderTarget.Size / 2;
var box = UIBox2i.FromDimensions(rounded, EntityPostRenderTarget.Size);
_renderHandle.DrawTexture(EntityPostRenderTarget.Texture, box.BottomLeft,
box.TopRight, Color.White, null, 0);
_renderHandle.SetSpace(CurrentSpace.WorldSpace);
_renderHandle.UseShader(null);
}
}
_flushRenderHandle(_renderHandle);
}
RenderOverlays(OverlaySpace.WorldSpace);
_lightingReady = false;
_setSpace(CurrentSpace.ScreenSpace);
RenderOverlays(OverlaySpace.ScreenSpace);
_drawLights(worldBounds);
}
using (DebugGroup("Grids"))
{
_drawGrids(worldBounds);
}
using (DebugGroup("Entities"))
{
_sortingSpritesList.Clear();
var map = _eyeManager.CurrentMap;
// So we could calculate the correct size of the entities based on the contents of their sprite...
// Or we can just assume that no entity is larger than 10x10 and get a stupid easy check.
// TODO: Make this check more accurate.
var widerBounds = worldBounds.Enlarged(5);
foreach (var sprite in _componentManager.GetAllComponents<SpriteComponent>())
{
var entity = sprite.Owner;
if (!entity.Transform.IsMapTransform || entity.Transform.MapID != map ||
!widerBounds.Contains(entity.Transform.WorldPosition) || !sprite.Visible)
{
continue;
}
_sortingSpritesList.Add(sprite);
}
_sortingSpritesList.Sort((a, b) =>
{
var cmp = ((int) a.DrawDepth).CompareTo((int) b.DrawDepth);
if (cmp != 0)
{
return cmp;
}
cmp = a.RenderOrder.CompareTo(b.RenderOrder);
if (cmp != 0)
{
return cmp;
}
return a.Owner.Uid.CompareTo(b.Owner.Uid);
});
foreach (var sprite in _sortingSpritesList)
{
Vector2i roundedPos = default;
if (sprite.PostShader != null)
{
_renderHandle.UseRenderTarget(EntityPostRenderTarget);
_renderHandle.Clear(new Color());
// Calculate viewport so that the entity thinks it's drawing to the same position,
// which is necessary for light application,
// but it's ACTUALLY drawing into the center of the render target.
var spritePos = sprite.Owner.Transform.WorldPosition;
var screenPos = _eyeManager.WorldToScreen(spritePos);
var (roundedX, roundedY) = roundedPos = (Vector2i) screenPos;
var flippedPos = new Vector2i(roundedX, ScreenSize.Y - roundedY);
flippedPos -= EntityPostRenderTarget.Size / 2;
_renderHandle.Viewport(Box2i.FromDimensions(-flippedPos, ScreenSize));
}
sprite.OpenGLRender(_renderHandle.DrawingHandleWorld);
if (sprite.PostShader != null)
{
_renderHandle.UseRenderTarget(null);
_renderHandle.Viewport(Box2i.FromDimensions(Vector2i.Zero, ScreenSize));
_renderHandle.UseShader(sprite.PostShader);
_renderHandle.SetSpace(CurrentSpace.ScreenSpace);
_renderHandle.SetModelTransform(Matrix3.Identity);
var rounded = roundedPos - EntityPostRenderTarget.Size / 2;
var box = UIBox2i.FromDimensions(rounded, EntityPostRenderTarget.Size);
_renderHandle.DrawTexture(EntityPostRenderTarget.Texture, box.BottomLeft,
box.TopRight, Color.White, null, 0);
_renderHandle.SetSpace(CurrentSpace.WorldSpace);
_renderHandle.UseShader(null);
}
}
_flushRenderHandle(_renderHandle);
}
RenderOverlays(OverlaySpace.WorldSpace);
_lightingReady = false;
_setSpace(CurrentSpace.ScreenSpace);
RenderOverlays(OverlaySpace.ScreenSpace);
using (DebugGroup("UI"))
{
_userInterfaceManager.Render(_renderHandle);

View File

@@ -104,12 +104,10 @@ namespace Robust.Client.Graphics.Clyde
private bool _quartResLights = true;
private bool _disposing;
private bool _lite;
public override bool Initialize(bool lite = false)
public override bool Initialize()
{
_debugStats = new ClydeDebugStats();
_lite = lite;
if (!InitWindowing())
{
return false;
@@ -280,10 +278,7 @@ namespace Robust.Client.Graphics.Clyde
GL.Viewport(0, 0, ScreenSize.X, ScreenSize.Y);
// Quickly do a render with _drawingSplash = true so the screen isn't blank.
if (!_lite)
{
Render();
}
}
// ReSharper disable once UnusedParameter.Local
@@ -475,11 +470,8 @@ namespace Robust.Client.Graphics.Clyde
private void _regenerateLightRenderTarget()
{
if (!_lite)
{
LightRenderTarget = CreateRenderTarget(_lightMapSize(), RenderTargetColorFormat.Rgba16F,
name: "LightRenderTarget");
}
LightRenderTarget = CreateRenderTarget(_lightMapSize(), RenderTargetColorFormat.Rgba16F,
name: "LightRenderTarget");
}
[StructLayout(LayoutKind.Sequential)]

View File

@@ -32,7 +32,7 @@ namespace Robust.Client.Graphics.Clyde
// Nada.
}
public override bool Initialize(bool lite = false)
public override bool Initialize()
{
return true;
}

View File

@@ -43,7 +43,7 @@ namespace Robust.Client.Graphics
public abstract Vector2i ScreenSize { get; }
public abstract void SetWindowTitle(string title);
public abstract bool Initialize(bool lite=false);
public abstract bool Initialize();
protected virtual void ReloadConfig()
{

View File

@@ -48,7 +48,7 @@ namespace Robust.Client.Interfaces.Graphics
void ProcessInput(FrameEventArgs frameEventArgs);
// Init.
bool Initialize(bool lite = false);
bool Initialize();
void Ready();
ClydeHandle LoadShader(ParsedShader shader, string name = null);