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; internal class UnityComputeWorld : IWorld { internal World PathTracingWorld; internal GraphicsBuffer ScratchBuffer; internal Mesh[] Meshes; internal LightHandle[] LightHandles; internal RayTracingContext RayTracingContext; internal readonly List 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); } } }