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; }
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)); }