Skip to content

Commit a733ae0

Browse files
fix bug with iterating chunked list
1 parent 993f7d2 commit a733ae0

File tree

9 files changed

+40
-12
lines changed

9 files changed

+40
-12
lines changed

Flamui.Tests/ArenaChunkedListTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace Flamui.Test;
2+
3+
public class ArenaChunkedListTests
4+
{
5+
[Fact]
6+
public void AddItemsAndIterate()
7+
{
8+
var arena = new Arena("TestArena", 1_000);
9+
var list = new ArenaChunkedList<int>(arena, 5);
10+
11+
list.Add(1);
12+
list.Add(2);
13+
list.Add(3);
14+
list.Add(4);
15+
list.Add(5);
16+
list.Add(6);
17+
list.Add(7);
18+
19+
Assert.Equal(Enumerable.Range(1, 7), list);
20+
}
21+
}

Flamui.Tests/LayoutingTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ public LayoutingTests(ITestOutputHelper console)
1616
{
1717
_console = console;
1818

19-
var virtualBuffer = RenderContext.manager.CreateBuffer("TestArena", (UIntPtr)1_000);
20-
Ui.Arena = new Arena(virtualBuffer);
19+
Ui.Arena = new Arena("TestArena", 1_000);
2120
}
2221

2322
public void Dispose()

Flamui.Tests/TextEditTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,8 +431,7 @@ private string ApplyInput(string initialText, Input input)
431431
{
432432
var (cursorPosition, selectionStart) = ExtractMetadata(ref initialText);
433433

434-
var virtualBuffer = RenderContext.manager.CreateBuffer("TestArena", (UIntPtr)1_000);
435-
var arena = Ui.Arena = new Arena(virtualBuffer);
434+
var arena = Ui.Arena = new Arena("TestArena", 1_000);
436435

437436
var font = FontLoader.LoadFont("segoeui.ttf");
438437
var layoutInfo = FontShaping.LayoutText(new ScaledFont(font, 20), initialText, float.MaxValue, TextAlign.Start, false, arena);

Flamui/Arena.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ public class Arena : IAllocator, IDisposable
3636

3737
private readonly Dictionary<object, GCHandle> objectToHandle = [];
3838

39-
public Arena(VirtualBuffer virtualBuffer)
39+
public static VirtualArenaManager manager = new();
40+
41+
public Arena(string name, int size)
4042
{
41-
VirtualBuffer = virtualBuffer;
43+
VirtualBuffer = manager.CreateBuffer(name, (UIntPtr)size);
4244
}
4345

4446
/// <summary>

Flamui/ArenaChunkedList.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ public bool MoveNext()
157157
}
158158

159159
_currentChunk = _currentChunk->NextChunk;
160+
_indexInChunk = 0;
160161
}
161162

162163
if (_indexInChunk >= _currentChunk->Count)

Flamui/RenderContext.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,13 @@ public class RenderContext
1313
public RenderContext()
1414
{
1515
ZIndexes.Push(0);
16-
var virtualBuffer = manager.CreateBuffer("PerFrameArena", (UIntPtr)1_000_000);
17-
Arena = new Arena(virtualBuffer);
16+
Arena = new Arena("PerFrameArena", 1_000_000);
1817
}
1918

2019
public Arena Arena;
2120
public Dictionary<int, ArenaChunkedList<Command>> CommandBuffers = [];
2221
private Stack<Matrix4X4<float>> MatrixStack = [];
2322

24-
public static VirtualArenaManager manager = new();
25-
2623
public void Reset()
2724
{
2825
CommandBuffers.Clear();
@@ -198,6 +195,12 @@ public void PrintCommands()
198195
case CommandType.Matrix:
199196
Console.WriteLine($"Matrix: {command.Matrix}");
200197
break;
198+
case CommandType.TinyVG:
199+
Console.WriteLine("VG");
200+
break;
201+
case CommandType.Picture:
202+
Console.WriteLine("Picture");
203+
break;
201204
default:
202205
throw new ArgumentOutOfRangeException(command.Type.ToString());
203206
}

Flamui/UiElements/FlexContainerRenderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public static void Render(RenderContext renderContext, FlexContainer flexContain
9999

100100
if (flexContainer.Info.ScrollConfigY.CanScroll || flexContainer.Info.ScrollConfigX.CanScroll)
101101
{
102-
renderContext.PopMatrix(); //todo, maybe some kind of push and pop system
102+
renderContext.PopMatrix();
103103

104104
flexContainer._scrollBarContainerX.UiElement?.Render(renderContext, offset.Add(flexContainer._scrollBarContainerX.UiElement.ParentData.Position));
105105
flexContainer._scrollBarContainerY.UiElement?.Render(renderContext, offset.Add(flexContainer._scrollBarContainerY.UiElement.ParentData.Position));

Flamui/UiWindow.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,8 @@ private void RenderToCanvas()
308308

309309
if (!RenderContextAreSame(RenderContext, LastRenderContext))
310310
{
311-
Console.WriteLine("rerender");
311+
RenderContext.PrintCommands();
312+
312313
_renderer.Gl.Viewport(Window.Size);
313314
RenderContext.Rerender(_renderer);
314315
Window.GLContext.SwapBuffers();

Flamui/VgAtlas.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public unsafe AtlasEntry GetAtlasEntry(int svgHash, Span<byte> vgData, uint widt
6969
return entry;
7070
}
7171

72+
Console.WriteLine("VG cache miss");
73+
7274
entry = Table.GetLeastUsed();
7375

7476
fixed (byte* tvg = vgData)

0 commit comments

Comments
 (0)