问题标签 [cikernel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - Metal:为 MSL cikernel 设置编译器和链接器选项后,.metal 文件中定义的 vertexFunction 变为 nil
.metal 文件中定义的 VertexFunction 和 FragmentFunction 运行良好,但是一旦我按照Apple 的文档指定编译器和链接器选项,它们就变成了 nil :Other Metal Compiler Flags 选项中的 -fcikernel 标志,以及用户定义设置中 MTLLINKER_FLAGS 中的 -cikernel flat。
我需要上面的设置用于带有 MSL(金属着色语言)的 cikernel。事实上,带有 Core Image Kernel Language 的 cikernel 在 12.0 中已弃用。
如何同时使用顶点/片段金属着色器和 MSL cikernel?
ios - 带有自定义金属内核的核心图像过滤器不起作用
我已经CIFilter
根据自定义内核进行了自定义,但无法使其正常工作,输出图像充满黑色,我不明白为什么。这是着色器:
第一个采样器是需要详细说明的图像,第二个图像是包含必须在该图像中使用的特定调色板的颜色的图像。
调色板图像是从一个值数组创建的RGBA
,传递给Data
使用此 CIImage 初始化程序创建的缓冲区init(bitmapData data: Data, bytesPerRow: Int, size: CGSize, format: CIFormat, colorSpace: CGColorSpace?)
。图像高度为 1 像素,颜色宽度为 1 像素。正确获得了图像,看起来像这样:
尝试检查我发现的着色器:
- 如果我返回
color
,我会得到原始图像,这意味着采样器image
被正确传递 - 如果我尝试
palette_image
从过滤器生成的图像中的任何像素返回颜色为黑色
我开始认为在palette_image
某种程度上没有正确传递。这里图像是如何通过过滤器的:
swift - 来自多个 .metal 文件(计算内核和 CIKernel 实现)的一个默认 MTLLibrary?
在将自定义 Core Image 过滤器内核迁移到 Metal Shading Language 时,我在构建默认 Metal 库 (default.metallib) 时遇到错误:
我的印象是这些可能在单独的 .metal 文件中。尝试将它们合并到一个文件中会导致此错误:
命名空间以metal
防止coreimage
计算内核在默认库中显示为可用函数。
找到了这个 SO answer,它建议构建单独的库:
Metal:为 MSL cikernel 设置编译器和链接器选项后,.metal 文件中定义的 vertexFunction 变为 nil
kernel - iOS 和 Mac 上的 Metal 内核有什么不同吗?
iOS 和 Mac 上的 Metal Shader Language 之间有什么主要区别吗?我正在尝试从 iOS 移植我的 Metal cifilters,它们看起来完全不同
ios - GLSL 到金属。瓦
我正在尝试通过 shadertoy ( https://www.shadertoy.com/view/3llcRN ) 上的示例制作平铺效果。这是 GLSL 上的代码:
这是我在金属上的代码:
结果:
什么不见了?我需要与 shadertoy 相同的结果
swift - Simple Pass Thru cikernel 会扭曲颜色值
我写了一个 rgbToHSV cikernel 来转换图像中的像素;但是,它无法正常工作。我已将其范围缩小到 RGB 值在此过程中被扭曲的事实。
为了简化我的代码,我将其更改为一个简单的通过过滤器。
我已经传递了 1280 x 720 图像的图像,这些图像都是一种颜色,然后在它通过 cikernel 之前和之后在 (100, 100) v 位置采样像素颜色。
结果如下:
红色之前:pixelColor :: rgba:1.0:0.0:0.0:1.0 之后:pixelColor :: rgba:1.0:0.07450980392156863:0.0:1.0
之前的绿色:pixelColor :: rgba:0.0:1.0:0.0:1.0 之后:pixelColor :: rgba:0.0:0.984313725490196:0.0:1.0
蓝色之前:pixelColor :: rgba:0.0:0.0:1.0:1.0 之后:pixelColor :: rgba:0.0:0.1803921568627451:1.0:1.0
如您所见,红色和绿色略有失真,但蓝色严重失真。
我已经保存了输出文件并检查了颜色,过滤器肯定会改变颜色。
非常感谢任何关于为什么简单的直通会改变颜色的见解。
简化的直通滤波器:
这是使用 cikernel 的 CIFilter:
调用过滤器
CGPoint 设置为 (100, 100) 的 getPixelColor 方法。我认为这个问题可能在这里发生,因为打印出来的颜色可能存在误传,但我检查了实际的输出图像,并且过滤器正在改变图像颜色:
和 cgImage(已编辑):
metal - 在 CIFilter 内核中使用归一化采样器坐标
我正在浏览有关自定义 CIFilter 的本教程:
除了采样器的坐标未标准化外,一切都运行良好。因此,例如这样的条件pos.y < 0.33
不起作用,内核使用实际的图像坐标。
由于本教程较旧,因此 CIFilter 中可能发生了“破坏”此代码的更改。我浏览了CI 内核的手册,但找不到获取内核内部采样器的标准化坐标的方法。
这是内核的代码: