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);
 }
Пример #2
0
            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();
        }