public static ShaderStorageBuffer Create() { var screen = Engine.GetValidCurrentContext(); var instance = new ShaderStorageBuffer(Ssbo.Create()); ContextAssociatedMemorySafety.Register(instance, screen); return(instance); }
public void Load(ReadOnlySpan <Bone> bones) { if (IsBoneLoaded) { throw new InvalidOperationException("Already loaded"); } InitializeSkeletonData(this, bones); _boneTranslationData.Load(_matrices !.AsSpan().MarshalCast <Matrix4, Color4>()); ContextAssociatedMemorySafety.Register(this, Engine.GetValidCurrentContext()); }
public static ComputeShaderDispatcher Create(IComputeShader shader) { ArgumentNullException.ThrowIfNull(shader); var screen = Engine.GetValidCurrentContext(); var source = IComputeShader.GetShaderSourceInternal(shader); var program = ShaderCompiler.CompileComputeShader(source); var instance = new ComputeShaderDispatcher(program, screen, shader); ContextAssociatedMemorySafety.Register(instance, screen); return(instance); }
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 void LoadAsPowerOfTwo(ReadOnlySpan <Color4> pixels) { _impl.LoadAsPOT(pixels); ContextAssociatedMemorySafety.Register(this, Engine.GetValidCurrentContext()); }
public void Load(ReadOnlySpan <Vector4> pixels) { _impl.Load(pixels.MarshalCast <Vector4, Color4>()); ContextAssociatedMemorySafety.Register(this, Engine.GetValidCurrentContext()); }