GPUOperator
Metal 用于渲染图形和执行图像处理等并行计算。但,
使用 Metal 通常有许多代码模板需要编写。
- 创建 Metal 设备
- 创建命令队列
- 创建库,注意哪个包包含它。
- PipelineState,CommandBuffer,Threadgroup。。。。。
😱
此库简化了这些步骤。
示例
Shader:雷暴
实现
实时视频处理:边缘检测
实现
- 使用 Prewitt 滤波器
- 与此相同。
图像处理:两张图像的差异
实现
之前 | 之后 | 差异 |
---|---|---|
![]() |
![]() |
![]() |
这表明
- 粗体字体已更改为常规字体。
- 最后的一个
processors.
单词已被删除。 - 边框消失了。
入门
1. 定义内核函数和内核类
#include <metal_stdlib>
using namespace metal;
kernel void monochrome(texture2d<half, access::read_write> dest [[ texture(0) ]],
texture2d<half, access::read_write> source [[ texture(1) ]],
uint2 gid [[ thread_position_in_grid ]]) {
half3 color = source.read(gid).rgb;
half max_color = fmax3(color.r, color.g, color.b);
dest.write(half4(half3(max_color), 1), gid);
}
import GPUOperator
final class Monochrome: Kernel {
static let functionName: String = "monochrome"
}
2. 设置 GPUOperator 实例
let gpuOperator = try? GPUOperator()
try? gpuOperator?.install(kernel: Monochrome())
3. 配置渲染过程
let renderingView = RenderingView(frame: .zero)
renderingView.gpuOperator = gpuOperator
renderingView.run()
run()
函数仅在RenderingView内部启动displaylink过程。如果您想使用MTLView(Metal标准类),以下示例可能会有所帮助。
import MetalKit
extension ViewController: MTKViewDelegate {
func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {}
func draw(in view: MTKView) {
autoreleasepool {
guard let drawable = view.currentDrawable else { return }
gpuOperator?.commit(drawable: drawable)
}
}
}
要求
- Swift 5.0
- iOS 12.0+
- 所有模拟器都不受支持。
许可
GPUOperator 在MIT许可下可用。