Свертка GLSL с большим ядром в памяти текстур

Я очень новичок в GLSL, но я пытаюсь написать ядро ​​​​свертки с фрагментным шейдером для обработки изображений. Я смог сделать это просто отлично, когда мое ядро ​​было маленьким (3x3), используя постоянную матрицу. Однако сейчас я хотел бы использовать ядро ​​размером 9x9. Или, если уж на то пошло, произвольного размера. Моя первоначальная мысль состояла в том, чтобы установить текстурную память, содержащую ядро ​​свертки. Затем, используя 2D-сэмплер, я читал текстурную память ядра и свертывал ее с текстурной памятью изображения (тоже 2D-сэмплер). Это правильный способ сделать это?

Я полагаю, вы также можете создать массив произвольного размера, содержащий коэффициенты. Это может работать для 81 коэффициента, но что произойдет, если вы хотите что-то большее? Например, 20x20?

В общем, если вам нужно получить доступ к нескольким большим объектам в GLSL, какова правильная стратегия? Спасибо! Спасибо,

D


person Doov    schedule 07.03.2011    source источник
comment
Вы реализовали это? Можешь поделиться своей реализацией?   -  person user4749    schedule 11.12.2012


Ответы (2)


Последовательный доступ:

  1. Атрибуты вершин

Произвольный доступ:

  1. Буферы текстур / Единообразные блоки, если источником является буфер
  2. Униформа, если источник небольшой
  3. Текстуры иначе
person kvark    schedule 07.03.2011
comment
Благодарю вас! Очень признателен. - person Doov; 08.03.2011
comment
Не могли бы вы рассказать, как использовать для этого атрибуты вершин? Будет ли иметь отдельный атрибут вершины для каждого смещения? Почему это будет быстрее, чем использование константного массива индексов вершин? - person Alex Flint; 21.06.2012
comment
@AlexFlint: мой ответ был на общий вопрос (в общем, если вам нужно получить доступ к нескольким большим объектам в GLSL, какова правильная стратегия?). Я бы вообще не рекомендовал использовать атрибуты вершин для хранения коэффициентов свертки :) - person kvark; 14.11.2013

Да, поскольку единообразное и постоянное пространство ограничено, использование текстуры в качестве замены является хорошей стратегией.

person Dr. Snoopy    schedule 07.03.2011
comment
Благодарю вас! Очень признателен. - person Doov; 08.03.2011