示例#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
        protected override AcceleratedImagingKernel CreateOutputKernel()
        {
            var kernelWriter = new KernelSourceWriter();

            kernelWriter.Write(@"

				float4 main(float2 uv  : POSITION) : SV_Target {

					return float4(
						uv.x < 0.5 && uv.y < 0.5f ? 1 : 0,
						uv.x >= 0.5f && uv.y < 0.5f ? 1 : 0,
						uv.x < 0.5f && uv.y >= 0.5f ? 1 : 0,
						uv.x >= 0.5f && uv.y >= 0.5f ? 0 : 1);
				}

			"            );

            return(AcceleratedImagingKernel.FromSource(ComputationProvider, kernelWriter).TextureSize(512, 512));
        }