示例#1
0
        public static ShaderStorageBuffer Create()
        {
            var screen   = Engine.GetValidCurrentContext();
            var instance = new ShaderStorageBuffer(Ssbo.Create());

            ContextAssociatedMemorySafety.Register(instance, screen);
            return(instance);
        }
示例#2
0
 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());
 }
示例#3
0
        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);
        }
示例#4
0
        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;
        }
示例#5
0
 public void LoadAsPowerOfTwo(ReadOnlySpan <Color4> pixels)
 {
     _impl.LoadAsPOT(pixels);
     ContextAssociatedMemorySafety.Register(this, Engine.GetValidCurrentContext());
 }
示例#6
0
 public void Load(ReadOnlySpan <Vector4> pixels)
 {
     _impl.Load(pixels.MarshalCast <Vector4, Color4>());
     ContextAssociatedMemorySafety.Register(this, Engine.GetValidCurrentContext());
 }