Металлический шейдер интерполирует значения в буфере - PullRequest
0 голосов
/ 05 мая 2018

Мне нужно передать буфер в фрагментный шейдер Metal, который представляет собой массив значений N float. Но я хочу, чтобы шейдер интерполировал значения, если ширина текстуры, к которой он рисуется, превышает N пикселей. Если я использую текстуру, то легко использовать сэмплер и установить линейную фильтрацию, но не ясно, можно ли установить интерполяцию для произвольного буфера в фрагментном шейдере.

1 Ответ

0 голосов
/ 05 мая 2018

Нет, невозможно, чтобы Metal интерполировал значения в буфере для вас. Металл не может знать, что буфер имеет ассоциированную «геометрию». Например, массив из N значений с плавающей запятой может представлять собой N горизонтальных элементов, N вертикальных элементов, 5 строк из N / 5 элементов и т. Д. Интерполяция требует знания того, какие элементы являются соседями данного элемента, что требует знания геометрии.

Конечно, вы можете выполнить интерполяцию самостоятельно в шейдере.

Вы также можете создать текстуру из буфера, используя -newTextureWithDescriptor:... / makeTexture() метод MTLBuffer. Затем вы можете взять образец из этой текстуры.

...