【发布时间】:2018-10-15 16:15:38
【问题描述】:
我需要将一个缓冲区传递给 Metal 片段着色器,它是一个包含 N 个浮点值的数组。但是,如果绘制纹理的宽度超过 N 个像素,我希望着色器插入值。如果我使用纹理,使用采样器和设置线性过滤很容易,但不清楚是否可以在片段着色器中的任意缓冲区上设置插值。
【问题讨论】:
标签: ios fragment-shader metal metalkit
我需要将一个缓冲区传递给 Metal 片段着色器,它是一个包含 N 个浮点值的数组。但是,如果绘制纹理的宽度超过 N 个像素,我希望着色器插入值。如果我使用纹理,使用采样器和设置线性过滤很容易,但不清楚是否可以在片段着色器中的任意缓冲区上设置插值。
【问题讨论】:
标签: ios fragment-shader metal metalkit
不,不可能让 Metal 对缓冲区中的值进行插值。 Metal 无法知道缓冲区有关联的“几何”。例如,一个包含 N 个浮点值的数组可以是 N 个水平元素、N 个垂直元素、5 行 N/5 个元素等。插值需要知道哪些元素是给定元素的邻居,这需要几何知识。
当然,您可以在着色器中自己进行插值。
您还可以使用MTLBuffer 的-newTextureWithDescriptor:.../makeTexture() 方法从缓冲区创建纹理。然后您可以从该纹理中采样。
【讨论】: