feat(core,rendering)!: add cleanup component support, refactor render pipeline
Introduce ICleanupComponent and cleanup archetype logic in ECS. Refactor component versioning to uint. Update IResourceDatabase to use map/unmap pattern. Decouple per-frame render requests from RenderSystem via IRenderPayload. Update render pipeline and extraction system to new API. BREAKING CHANGE: Entity destruction and render pipeline APIs have changed. IResourceDatabase.MapResource signature is updated; all callers must use map/memcpy/unmap. RenderSystem no longer manages per-frame render requests directly.
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
using Ghost.Graphics.Core;
|
||||
using Ghost.Graphics.RenderPipeline;
|
||||
using Misaki.HighPerformance.LowLevel.Buffer;
|
||||
using Misaki.HighPerformance.LowLevel.Collections;
|
||||
|
||||
namespace Ghost.Graphics.Test.RenderPipeline;
|
||||
|
||||
internal sealed class TestRenderPayload : IRenderPayload
|
||||
{
|
||||
public class FrameData
|
||||
{
|
||||
public UnsafeList<RenderRequest> renderRequests;
|
||||
}
|
||||
|
||||
private readonly RenderSystem _renderSystem;
|
||||
private readonly FrameData[] _frameData;
|
||||
|
||||
public RenderSystem RenderSystem => _renderSystem;
|
||||
public ReadOnlySpan<FrameData> FrameRequestData => _frameData;
|
||||
|
||||
public TestRenderPayload(RenderSystem renderSystem)
|
||||
{
|
||||
_renderSystem = renderSystem;
|
||||
_frameData = new FrameData[renderSystem.MaxFrameLatency];
|
||||
|
||||
for (int i = 0; i < _frameData.Length; i++)
|
||||
{
|
||||
_frameData[i].renderRequests = new UnsafeList<RenderRequest>(2, Allocator.Persistent);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddRenderRequest(RenderRequest request)
|
||||
{
|
||||
var index = (int)(_renderSystem.CPUFenceValue % (uint)_frameData.Length);
|
||||
_frameData[index].renderRequests.Add(request);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
for (int i = 0; i < _frameData.Length; i++)
|
||||
{
|
||||
_frameData[i].renderRequests.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class TestRenderPipelineSettings : IRenderPipelineSettings
|
||||
{
|
||||
public void CreatePipeline(RenderSystem renderSystem, out IRenderPipeline renderPipeline, out IRenderPayload renderPayload)
|
||||
{
|
||||
renderPipeline = new TestRenderPipeline(renderSystem);
|
||||
renderPayload = new TestRenderPayload(renderSystem);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user