Использование шаблонов для управления функциями glUniform - PullRequest
7 голосов
/ 02 августа 2010

Привет еще раз и добро пожаловать к другому 'не было бы замечательно, если бы мы объединили две вещи, о которых я действительно ничего не понимаю' вопрос;)

Эпизод: Униформа OpenGL и шаблоны c ++

Идея: не было бы замечательно, если бы вы могли написать одну шаблонную функцию для установки униформы в шейдере OpenGL?

Проблема: Униформа в шейдерах устанавливается с использованием ряда функций glUniform *. Они отличаются:

  1. Тип : есть несколько типов, которые может принимать униформа. Это приводит к тому, что имена различных функций в OpenGL выглядят так: glUniform1f, glUniform1i, glUniform1fv и т. Д.

    Их можно легко объединить с помощью перегрузки функций. Но это приводит к огромному количеству похожих функций.

    Первый вопрос: можно ли использовать шаблоны в этом месте? Насколько я понимаю шаблоны, вы должны были бы специализироваться для каждой новой функции. И, в конце концов, вы получите то же количество функций, что и при простой перегрузке.

  2. Счетчик параметров : Число в функциях glUniform относится к числу заданных параметров. Существует от одного до 4 параметров, которые относятся к простым значениям вплоть до векторов с 4 элементами.

    Второй вопрос: возможно ли реализовать динамический подсчет параметров с помощью шаблонов?

  3. Матрицы : Чтобы усложнить задачу, существует еще один класс унифицированных функций, которые отправляют матрицы, но поскольку я на самом деле их не использую, они меня не особо интересуют.

Возможно, нет никакого реального способа упростить унифицированные методы ... но, возможно, кто-то может придумать отличное решение, используя мощные шаблоны?

С уважением, Florian

1 Ответ

5 голосов
/ 02 августа 2010

1: Да, и да, но, по крайней мере, когда компилятор жалуется, что он не может выбирать между плавающими и двойными перегрузками, вы можете заставить его очень просто, то есть setUniform<float>(blah) вместо setUniform(blah)

2: на этот раз перегрузка является более простым решением:)

3: В чем вопрос?

Вопрос в том, зачем вам это делать?

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