Пример #1
0
        void IReactor.SetBackBuffer(IWritableMemory writableMemory, TextureFormat pixelFormat, int stride)
        {
            foreach (var kernel in mHardwareQueue)
            {
                kernel.CastTo <IDisposable>()?.Dispose();
            }

            mHardwareQueue.Clear();
            mOutputKernel?.Dispose();

            if (writableMemory.Size <= 0)
            {
                throw new InvalidOperationException("The buffer dimensions are invalid.");
            }

            mOutputTextureMemory = writableMemory;
            mOutputTexture       = new TextureView(writableMemory, stride, pixelFormat);

            CreateComputeKernels(mHardwareQueue);

            var outputKernel = CreateOutputKernel();

            if (outputKernel == null)
            {
                throw new ArgumentException("The imaging kernel is null.");
            }

            mOutputKernel = outputKernel;
        }
Пример #2
0
        void IReactor.SetBackBuffer(IWritableMemory writableMemory, TextureFormat pixelFormat, int stride)
        {
            mBackBufferMemory      = writableMemory;
            mBackBufferPixelFormat = pixelFormat;
            mBackBuffer            = new TextureView(writableMemory, stride, pixelFormat);

            InitializeOverride();
        }
Пример #3
0
        public static WriteOnlyMemoryWindow GetWriteOnlyWindow([NotNull] this IWritableMemory writableMemory, int offset, long size)
        {
            if (writableMemory == null)
            {
                throw new ArgumentNullException(nameof(writableMemory));
            }

            return(new WriteOnlyMemoryWindow(writableMemory, offset, size));
        }
Пример #4
0
        public static WriteOnlyArrayView <T> AsWriteOnlyArray <T>([NotNull] this IWritableMemory writableMemory) where T : struct
        {
            if (writableMemory == null)
            {
                throw new ArgumentNullException(nameof(writableMemory));
            }

            return(new WriteOnlyArrayView <T>(writableMemory));
        }
Пример #5
0
        public WriteOnlyArrayView([NotNull] IWritableMemory memory)
        {
            if (memory == null)
            {
                throw new ArgumentNullException(nameof(memory));
            }

            mMemory = memory;

            mSizeOfT = Marshal.SizeOf <T>();
            mLength  = memory.Size / mSizeOfT;
        }
Пример #6
0
        public UnmanagedStream([NotNull] IWritableMemory memory)
        {
            if (memory == null)
            {
                throw new ArgumentNullException(nameof(memory));
            }

            mMemory  = memory;
            CanRead  = false;
            CanSeek  = false;
            CanWrite = true;
        }
Пример #7
0
        public static void Read([NotNull] this IReadable readableMemory, [NotNull] IWritableMemory targetMemory)
        {
            if (readableMemory == null)
            {
                throw new ArgumentNullException(nameof(readableMemory));
            }

            if (targetMemory == null)
            {
                throw new ArgumentNullException(nameof(targetMemory));
            }

            readableMemory.Read(targetMemory.GetPointer(), 0, targetMemory.Size);
        }
Пример #8
0
        public WriteOnlyTextureView([NotNull] IWritableMemory memory, int stride, TextureFormat format)
        {
            if (memory == null)
            {
                throw new ArgumentNullException(nameof(memory));
            }

            if (stride <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(stride));
            }

            mMemory = memory;
            mFormat = format;

            mStride = stride;
            mWidth  = stride >> 2;
            mHeight = (int)(memory.Size / stride);
        }
Пример #9
0
        public WriteOnlyMemoryWindow([NotNull] IWritableMemory memoryBlock, int offset, long size)
        {
            if (memoryBlock == null)
            {
                throw new ArgumentNullException(nameof(memoryBlock));
            }

            if (offset < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(offset));
            }

            if (size > memoryBlock.Size - offset)
            {
                throw new ArgumentOutOfRangeException(nameof(size), "The window size is larger than the size of the target block.");
            }

            Pointer = memoryBlock.GetPointer() + offset;
            Size    = size;
        }
Пример #10
0
        public static void FromArray <T>(this IWritableMemory memory, [NotNull] T[] sourceArray) where T : struct
        {
            if (sourceArray == null)
            {
                throw new ArgumentNullException(nameof(sourceArray));
            }

            var sourceArrayHandle = default(GCHandle);

            try
            {
                sourceArrayHandle = GCHandle.Alloc(sourceArray, GCHandleType.Pinned);
                UnmanagedBlock.Copy(sourceArrayHandle.AddrOfPinnedObject(), memory.GetPointer(), 0, 0, memory.Size);
            }
            finally
            {
                if (sourceArrayHandle.IsAllocated)
                {
                    sourceArrayHandle.Free();
                }
            }
        }
Пример #11
0
 public void Dispose()
 {
     mBackBufferPixelFormat = default;
     mBackBufferMemory      = null;
     mBackBuffer            = null;
 }