mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-14 19:29:36 +01:00
More premature optimizations.
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using OpenTK.Graphics.OpenGL4;
|
||||
using SS14.Client.GameObjects;
|
||||
using SS14.Client.Graphics.ClientEye;
|
||||
@@ -59,6 +58,8 @@ namespace SS14.Client.Graphics.Clyde
|
||||
// Yes this can be optimized later.
|
||||
private Color? BatchingModulate;
|
||||
|
||||
private RenderHandle _renderHandle;
|
||||
|
||||
public void Render(FrameEventArgs args)
|
||||
{
|
||||
if (GameController.Mode != GameController.DisplayMode.OpenGL)
|
||||
@@ -74,7 +75,7 @@ namespace SS14.Client.Graphics.Clyde
|
||||
_currentModelMatrix = Matrix3.Identity;
|
||||
|
||||
// We hand out this handle so external code can generate command lists for us.
|
||||
var renderHandle = new RenderHandle(this);
|
||||
_renderHandle._drawingHandles.Clear();
|
||||
_currentSpace = CurrentSpace.ScreenSpace;
|
||||
|
||||
// Screen view matrix is identity. Easy huh.
|
||||
@@ -101,8 +102,8 @@ namespace SS14.Client.Graphics.Clyde
|
||||
|
||||
if (_drawingSplash)
|
||||
{
|
||||
_displaySplash(renderHandle);
|
||||
_flushRenderHandle(renderHandle);
|
||||
_displaySplash(_renderHandle);
|
||||
_flushRenderHandle(_renderHandle);
|
||||
_window.SwapBuffers();
|
||||
return;
|
||||
}
|
||||
@@ -130,10 +131,10 @@ namespace SS14.Client.Graphics.Clyde
|
||||
.Where(o => o.Space == OverlaySpace.ScreenSpaceBelowWorld)
|
||||
.OrderBy(o => o.ZIndex))
|
||||
{
|
||||
overlay.OpenGLRender(renderHandle);
|
||||
overlay.OpenGLRender(_renderHandle);
|
||||
}
|
||||
|
||||
_flushRenderHandle(renderHandle);
|
||||
_flushRenderHandle(_renderHandle);
|
||||
|
||||
_popDebugGroupMaybe();
|
||||
|
||||
@@ -224,7 +225,7 @@ namespace SS14.Client.Graphics.Clyde
|
||||
_pushDebugGroupMaybe(DbgGroupEntities);
|
||||
|
||||
// Use a SINGLE drawing handle for all entities.
|
||||
var drawingHandle = renderHandle.CreateHandleWorld();
|
||||
var drawingHandle = _renderHandle.CreateHandleWorld();
|
||||
|
||||
var entityList = new List<SpriteComponent>(100);
|
||||
|
||||
@@ -247,7 +248,7 @@ namespace SS14.Client.Graphics.Clyde
|
||||
entity.OpenGLRender(drawingHandle);
|
||||
}
|
||||
|
||||
_flushRenderHandle(renderHandle);
|
||||
_flushRenderHandle(_renderHandle);
|
||||
|
||||
_popDebugGroupMaybe();
|
||||
|
||||
@@ -265,9 +266,9 @@ namespace SS14.Client.Graphics.Clyde
|
||||
|
||||
// Render UI.
|
||||
_currentSpace = CurrentSpace.ScreenSpace;
|
||||
_userInterfaceManager.Render(renderHandle);
|
||||
_userInterfaceManager.Render(_renderHandle);
|
||||
|
||||
_flushRenderHandle(renderHandle);
|
||||
_flushRenderHandle(_renderHandle);
|
||||
|
||||
_popDebugGroupMaybe();
|
||||
|
||||
|
||||
@@ -287,6 +287,9 @@ namespace SS14.Client.Graphics.Clyde
|
||||
GL.BindBufferBase(BufferRangeTarget.UniformBuffer, ProjViewBindingIndex, ProjViewUBO.Handle);
|
||||
|
||||
_drawingSplash = true;
|
||||
|
||||
_renderHandle = new RenderHandle(this);
|
||||
|
||||
Render(null);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using SS14.Client.Interfaces.UserInterface;
|
||||
using SS14.Shared.IoC;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using SS14.Shared.Log;
|
||||
using SS14.Shared.Interfaces.Reflection;
|
||||
@@ -90,7 +91,7 @@ namespace SS14.Client.UserInterface
|
||||
/// <summary>
|
||||
/// Gets an enumerable over all the children of this control.
|
||||
/// </summary>
|
||||
public IEnumerable<Control> Children => _orderedChildren;
|
||||
public OrderedChildEnumerable Children => new OrderedChildEnumerable(this);
|
||||
|
||||
public int ChildCount => _orderedChildren.Count;
|
||||
|
||||
@@ -2243,6 +2244,31 @@ namespace SS14.Client.UserInterface
|
||||
return (Godot.Control) scene2.Instance();
|
||||
}
|
||||
|
||||
public readonly struct OrderedChildEnumerable : IEnumerable<Control>
|
||||
{
|
||||
private readonly Control Owner;
|
||||
|
||||
public OrderedChildEnumerable(Control owner)
|
||||
{
|
||||
Owner = owner;
|
||||
}
|
||||
|
||||
public List<Control>.Enumerator GetEnumerator()
|
||||
{
|
||||
return Owner._orderedChildren.GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator<Control> IEnumerable<Control>.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
|
||||
[BaseTypeRequired(typeof(Control))]
|
||||
internal class ControlWrapAttribute : Attribute
|
||||
|
||||
@@ -111,6 +111,11 @@ namespace SS14.Client.UserInterface.Controls
|
||||
|
||||
var entryOffset = 0;
|
||||
|
||||
// A stack for format tags.
|
||||
// This stack contains the format tag to RETURN TO when popped off.
|
||||
// So when a new color tag gets hit this stack gets the previous color pushed on.
|
||||
var formatStack = new Stack<FormattedMessage.Tag>(2);
|
||||
|
||||
foreach (var entry in _entries)
|
||||
{
|
||||
if (entryOffset - _mouseWheelOffset < 0)
|
||||
@@ -119,12 +124,10 @@ namespace SS14.Client.UserInterface.Controls
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entryOffset + entry.Height - _mouseWheelOffset > contentBox.Height) break;
|
||||
|
||||
// A stack for format tags.
|
||||
// This stack contains the format tag to RETURN TO when popped off.
|
||||
// So when a new color tag gets hit this stack gets the previous color pushed on.
|
||||
var formatStack = new Stack<FormattedMessage.Tag>(2);
|
||||
if (entryOffset + entry.Height - _mouseWheelOffset > contentBox.Height)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// The tag currently doing color.
|
||||
var currentColorTag = TagWhite;
|
||||
@@ -132,7 +135,9 @@ namespace SS14.Client.UserInterface.Controls
|
||||
var globalBreakCounter = 0;
|
||||
var lineBreakIndex = 0;
|
||||
var baseLine = contentBox.TopLeft + new Vector2(0, font.Ascent + entryOffset - _mouseWheelOffset);
|
||||
formatStack.Clear();
|
||||
foreach (var tag in entry.Message.Tags)
|
||||
{
|
||||
switch (tag)
|
||||
{
|
||||
case FormattedMessage.TagColor tagColor:
|
||||
@@ -171,6 +176,7 @@ namespace SS14.Client.UserInterface.Controls
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
entryOffset += entry.Height + font.LineSeparation;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using JetBrains.Annotations;
|
||||
@@ -14,7 +14,7 @@ namespace SS14.Client.Utility
|
||||
[PublicAPI]
|
||||
public sealed class FormattedMessage
|
||||
{
|
||||
public IReadOnlyList<Tag> Tags => _tags;
|
||||
public TagList Tags => new TagList(_tags);
|
||||
private readonly List<Tag> _tags;
|
||||
|
||||
public FormattedMessage()
|
||||
@@ -94,5 +94,34 @@ namespace SS14.Client.Utility
|
||||
public class TagPop : Tag
|
||||
{
|
||||
}
|
||||
|
||||
public readonly struct TagList : IReadOnlyList<Tag>
|
||||
{
|
||||
private readonly List<Tag> _tags;
|
||||
|
||||
public TagList(List<Tag> tags)
|
||||
{
|
||||
_tags = tags;
|
||||
}
|
||||
|
||||
public List<Tag>.Enumerator GetEnumerator()
|
||||
{
|
||||
return _tags.GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator<Tag> IEnumerable<Tag>.GetEnumerator()
|
||||
{
|
||||
return _tags.GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return _tags.GetEnumerator();
|
||||
}
|
||||
|
||||
public int Count => _tags.Count;
|
||||
|
||||
public Tag this[int index] => _tags[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user