首页 文章

在金属中初始化MTLPixelFormatR32Float的纹理

提问于
浏览
1

我有一个缓冲区初始化单通道浮点图像,我需要进入浮点格式纹理(MTLPixelFormatR32Float) . 我尝试使用该格式创建纹理并执行以下操作:

float *rawData = (float*)malloc(sizeof(float) * img.cols * img.rows);

for(int i = 0; i < img.rows; i++){
  for(int j = 0; j < img.cols; j++){
     rawData[i * img.cols + j] = img.at<float>(i, j);
     }
 }

MTLTextureDescriptor *textureDescriptor = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatR32Float
                                                                                                 width:img.cols
                                                                                                height:img.rows
                                                                                             mipmapped:NO];

[texture replaceRegion:region mipmapLevel:0 withBytes:&rawData bytesPerRow:bytesPerRow];

其中 rawData 是具有必要浮点数据的缓冲区 . 这不起作用,我在 [texture replaceRegion...] 行上收到EXC_BAD_ACCESS错误 . 我也尝试过MTKTextureLoader,它也返回nil而不是纹理 .

帮助将不胜感激 . 如果有人知道如何使用自定义浮点数据初始化MTLPixelFormatR32Float纹理以进行数据并行计算,我将非常感激 .

1 回答

  • 2

    传递给replaceRegion的字节应指向您的数据 . 您错误地将指针传递给指针 . 要解决此问题,请将 withBytes:&rawData 替换为 withBytes:rawData

相关问题