首页 > 解决方案 > 金属着色器在缓冲区中插入值

问题描述

我需要将一个缓冲区传递给 Metal 片段着色器,它是一个包含 N 个浮点值的数组。但是如果绘制纹理的宽度超过 N 个像素,我希望着色器插入值。如果我使用纹理,很容易使用采样器并设置线性过滤,但不清楚是否可以在片段着色器中的任意缓冲区上设置插值。

标签: iosfragment-shadermetalmetalkit

解决方案


不,不可能让 Metal 为您在缓冲区中的值进行插值。Metal 无法知道缓冲区有关联的“几何”。例如,一个包含 N 个浮点值的数组可以是 N 个水平元素、N 个垂直元素、5 行 N/5 个元素等。插值需要知道哪些元素是给定元素的邻居,这需要几何知识。

当然,您可以在着色器中自己进行插值。

-newTextureWithDescriptor:...您还可以使用/makeTexture()方法从缓冲区创建纹理MTLBuffer。然后你可以从那个纹理中取样。


推荐阅读