【问题标题】:How to write an unsafepointer of type float in MPSImageDilate如何在 MPSImageDilate 中编写浮点类型的不安全指针
【发布时间】:2023-03-31 03:22:01
【问题描述】:

我是 Unsafepointer 的新手。在本文档的以下内容中,它说我需要值为 Unsafepointer 类型。我需要它等效于 1.0(浮点数)的重复值的 139*139 个元素的数组。

https://developer.apple.com/library/ios/documentation/MetalPerformanceShaders/Reference/MPSImageDilate_ClassReference/index.html#//apple_ref/occ/instm/MPSImageDilate/initWithDevice:kernelWidth:kernelHeight:values:

有人可以提供这方面的想法吗?

【问题讨论】:

    标签: ios arrays swift metal unsafe-pointers


    【解决方案1】:

    在这种情况下,您将能够传入对数组的引用(即,指向现有数组的指针)。

    var dilateKernelValues = [Float](count:139*139, repeatedValue:1.0)
    
    let dilateShader = MPSImageDilate(
        device: device, 
        kernelWidth:139, 
        kernelHeight:139, 
        values:&dilateKernelValues)
    

    【讨论】:

    • 抱歉,缺少 values 参数标签。代码现已更新,但我不确定这会有所帮助。您是说代码不起作用(运行和编译正常),还是说着色器没有给您预期的结果?我们可能需要更多细节,内核大小对我来说确实有点大,但我想这取决于图像大小和你想要做什么。
    • 当我尝试 139 * 139 时,我得到“失败的断言 `MPSImageDilate initWithDevice:kernelWidth:kernelHeight:values] 内核高度太大。'”。我可以达到 127 * 127 并且没有 & 符号的呼叫对我有效。顺便说一句,包含所有 1.0 的探针将不起作用 - 将它们设置为所有零将产生矩形膨胀,在这种情况下,MPSImageAreaMax 是更好的选择。
    • Dilate 是.MPS 中最昂贵的过滤器之一。非常大的区域可能会导致 GPU 长时间处于忙碌状态,如果 GPU 错误地误认为它已挂起,则会导致帧丢失并可能导致 GPU 重新启动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多