我有一个用单通道浮点图像初始化的缓冲区,我需要进入浮点格式纹理(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纹理以进行数据并行计算,我将非常感激。
答案 0 :(得分:2)
传递给replaceRegion的字节应指向您的数据。您错误地将指针传递给指针。
要解决此问题,请将withBytes:&rawData
替换为withBytes:rawData