是否可以在 Swift 的 Metalkit 库函数中获取或计算图像的像素 x 和 y 索引?



我试图在图像中的一些像素上执行一些逻辑。目前,我正在使用CGImage的蛮力方法,它看起来像这样:

for y in 0 ..< cgImage.height {
for x in 0 ..< cgImage.width {
if x == 20 && y == 300 {
//TODO: Change pixel color to clear color.
}
}
}

然而,这种方法超级慢,我希望在Swift Metal中做类似的事情来提高性能。在Swift Metal中,我不知道如何在函数中获得特定像素的索引。Thread_position_in_grid只返回网格中线程的x和y。是否有办法确定当前像素的X和Y被操作?

这是金属功能,我试图创建和转换从使用CGImage循环到金属GPU处理:

kernel void black (texture2d<float, access::read> inTexture [[texture(0)]],
uint2 id [[thread_position_in_grid]]) {
if (id.x == 20 && id.y == 300){
//TODO: Change pixel color to clear color.
}
}

决定把这个也贴出来。如果不是,我很乐意删掉。

kernel vec4 clearColorPixel (sampler image) {
vec2 coord = destCoord();
if (coord.x == 20. && coord.y == 300.) {
// TODO: change pixel to clear color
}
}

虽然我主要不使用金属或纹理,但似乎您正在使用CPU将uint2 id传递到内核。简单地传递像素。这对我来说效果很好,而且不是很慢。

相关内容

  • 没有找到相关文章

最新更新