using System.Collections.Generic;
using UnityEngine.PathTracing.Core;
using UnityEngine.LightTransport;
using UnityEngine.Rendering;
using UnityEngine.Rendering.UnifiedRayTracing;
namespace UnityEngine.PathTracing.Integration
{
using LightHandle = Handle<World.LightDescriptor>;
internal class UnityComputeWorld : IWorld
{
internal World PathTracingWorld;
internal GraphicsBuffer ScratchBuffer;
internal Mesh[] Meshes;
internal LightHandle[] LightHandles;
internal RayTracingContext RayTracingContext;
internal readonly List<Object> TemporaryObjects = new();
internal const uint RenderingObjectLayer = 1 << 0;
internal void BuildAccelerationStructure(CommandBuffer cmd)
{
PathTracingWorld.GetAccelerationStructure().Build(cmd, ref ScratchBuffer);
}
public void Init(RayTracingContext rayTracingContext, WorldResourceSet worldResources)
{
PathTracingWorld = new World();
PathTracingWorld.Init(rayTracingContext, worldResources);
RayTracingContext = rayTracingContext;
}
public void Dispose()
{
PathTracingWorld?.Dispose();
ScratchBuffer?.Dispose();
foreach (var obj in TemporaryObjects)
CoreUtils.Destroy(obj);
}
}
}