internal RenderingArea(IHostScreen screen) { _state = RenderingAreaLifeState.New; OwnerScreen = screen; TimingPoints = new FrameTimingPointList(screen); Lights = new LightManager(screen); Layers = new LayerCollection(this); _runningTokenSource = new CancellationTokenSource(); }
public async UniTask LoadAsync <TBoneSpan>(TBoneSpan bones, FrameTimingPointList timingPoints, FrameTiming timing, CancellationToken cancellationToken = default) where TBoneSpan : IReadOnlySpan <Bone> { if (IsBoneLoaded) { throw new InvalidOperationException("Already loaded"); } if (timingPoints is null) { throw new ArgumentNullException(nameof(timingPoints)); } timing.ThrowArgExceptionIfNotSpecified(nameof(timing)); cancellationToken.ThrowIfCancellationRequested(); await UniTask.SwitchToThreadPool(); cancellationToken.ThrowIfCancellationRequested(); try { InitializeSkeletonData(this, bones.AsReadOnlySpan()); await timingPoints.TimingOf(timing).Next(cancellationToken); if (IsBoneLoaded) { throw new InvalidOperationException("Already loaded"); } _boneTranslationData.Load(_matrices !.AsSpan().MarshalCast <Matrix4, Color4>()); } catch { _posMatrices.Dispose(); _posInvMatrices.Dispose(); _tree.Dispose(); _matrices.Dispose(); _translations.Dispose(); throw; } ContextAssociatedMemorySafety.Register(this, Engine.GetValidCurrentContext()); return; }
public UniTask LoadAsync <TBoneSpan>(TBoneSpan bones, FrameTimingPointList timingPoints, CancellationToken cancellationToken = default) where TBoneSpan : IReadOnlySpan <Bone> { return(LoadAsync(bones, timingPoints, FrameTiming.Update, cancellationToken)); }