金属着色器在缓冲区中插入值
Metal shader interpolate values in buffer
我需要将缓冲区传递给金属片段着色器,它是一个包含 N 个浮点值的数组。但我希望着色器在绘制纹理的宽度超过 N 像素时插入值。如果我使用纹理,很容易使用采样器并设置线性过滤,但不清楚是否可以在片段着色器中的任意缓冲区上设置插值。
不,不可能让 Metal 为您插入缓冲区中的值。 Metal 无法知道缓冲区有关联的 "geometry"。例如,N 个浮点值的数组可以是 N 个水平元素、N 个垂直元素、5 行 N/5 元素等。插值需要知道哪些元素是给定元素的邻居,这需要几何知识。
当然,您可以在着色器中自己进行插值。
您还可以使用 MTLBuffer
的 -newTextureWithDescriptor:...
/makeTexture()
方法从缓冲区创建纹理。然后你可以从那个纹理中采样。
我需要将缓冲区传递给金属片段着色器,它是一个包含 N 个浮点值的数组。但我希望着色器在绘制纹理的宽度超过 N 像素时插入值。如果我使用纹理,很容易使用采样器并设置线性过滤,但不清楚是否可以在片段着色器中的任意缓冲区上设置插值。
不,不可能让 Metal 为您插入缓冲区中的值。 Metal 无法知道缓冲区有关联的 "geometry"。例如,N 个浮点值的数组可以是 N 个水平元素、N 个垂直元素、5 行 N/5 元素等。插值需要知道哪些元素是给定元素的邻居,这需要几何知识。
当然,您可以在着色器中自己进行插值。
您还可以使用 MTLBuffer
的 -newTextureWithDescriptor:...
/makeTexture()
方法从缓冲区创建纹理。然后你可以从那个纹理中采样。