protected override void AddKernel(OpenCL.Net.Program program) { kernelResize = new KernelResize(context, commandQueue, program, out error); kernelLaplacian = new KernelLaplacian(context, commandQueue, program, out error); kernelSobel = new KernelSobel(context, commandQueue, program, out error); kernelGrayscale = new KernelGrayscale(context, commandQueue, program, out error); //kernelHybrid = new KernelHybrid(context, commandQueue, program, out error); kernelQuantize = new KernelQuantize(context, commandQueue, program, out error); kernelGenerateUnicode = new KernelGenerateUnicode(context, commandQueue, program, out error); kernelGammaCorrection = new KernelGammaCorrection(context, commandQueue, program, out error); kernelContrastStretch = new KernelContrastStretch(context, commandQueue, program, out error); }
protected override ITextureFilter CreateFilter(ITextureFilter sourceFilter) { if (!Renderer.IsOpenClAvail || Renderer.RenderQuality.PerformanceMode()) { return(new NullFilter()); // display blank screen on purpose } // get MPDN to scale image to target size first sourceFilter += new Resizer { ResizerOption = ResizerOption.TargetSize100Percent }; // apply our blue tint var outputSize = sourceFilter.Size(); var blueTint = new ClKernel(FromFile("BlueTint.cl", entryPoint: "BlueTint"), globalWorkSizes: new[] { outputSize.Width, outputSize.Height }) { Arguments = new[] { 0.25f, 0.5f, 0.75f } }; return(blueTint.ApplyTo(sourceFilter)); }
private void ImgToImgKernel(ClKernel kernel, Bitmap source, Bitmap destination, params object[] extra) { //Check status if (error != ErrorCode.Success) { return; } //Create Cl memory ClImage2D srcMem = new ClImage2D(source, context, IOMode.ReadOnly, ChannelType.RGBA32bpp, out error); ClImage2D dstMem = new ClImage2D(destination, context, IOMode.WriteOnly, ChannelType.RGBA32bpp, out error); //Check error if (!srcMem.Ready || !dstMem.Ready || IsErrorOccurred()) { srcMem.Dispose(); dstMem.Dispose(); if (error != ErrorCode.Success) { return; } } //Create argument list object[] argList = new object[2 + extra.Length]; argList[0] = srcMem; argList[1] = dstMem; extra.CopyTo(argList, 2); //Run kernel kernel.ExecuteKernel(out error, argList); if (error != ErrorCode.Success) { return; } //Clean up srcMem.Dispose(); dstMem.Dispose(); }