0

我想从我的着色器中将图像浮点数据存储在未格式化的内存位置,而 MTLBuffer 似乎是答案。首先,这可能吗?我在 MTLBuffer 的苹果文档中看到可以访问指向缓冲区的指针。是否可以在着色器中使用该指针来填充分配的内存?其次,我想知道这个操作有多快;使用纹理操作会快速高效吗?

我问这个是因为如果确认 MTLBuffer 的访问速度与使用 MTLTexture 的操作相当,我需要重新设计我的很多代码。

4

1 回答 1

1

首先,重要的是要了解几个限制

  • 片段着色器既不支持写入纹理也不支持写入缓冲区。你唯一的选择是渲染到纹理。
  • 顶点着色器支持写入缓冲区但不支持纹理。

因此,如果您使用这些着色器类型中的任何一种,则无论性能如何,您都无法在纹理写入和缓冲区写入之间进行选择。
如果您使用的是计算着色器并且您的写入模式相对简单(即 1 对 1 的线程 id 与像素对应),我预计缓冲区写入会更快。也就是说,没有好的一般建议,所以最好的解决方案是同时尝试和配置文件。

于 2015-04-23T00:29:37.700 回答