GPUOperator 0.1.0

GPUOperator 0.1.0

h-yuya 维护。



  • 作者:
  • horita-yuya

GPUOperator

Swift Version License Platform

Metal 用于渲染图形和执行图像处理等并行计算。但,

使用 Metal 通常有许多代码模板需要编写。

  • 创建 Metal 设备
  • 创建命令队列
  • 创建库,注意哪个包包含它。
  • PipelineState,CommandBuffer,Threadgroup。。。。。😱

此库简化了这些步骤。

示例

Shader:雷暴

实现

thundershower

实时视频处理:边缘检测

实现

camera

  • 使用 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许可下可用。