OpenGL текстурная база внутреннего формата для шейдера - PullRequest
0 голосов
/ 21 июля 2009

Я пытаюсь имитировать поведение OpenGL glTexEnv с помощью шейдера. Это довольно сложная функция, но она должна быть выполнимой. Единственная проблема заключается в том, что функция работает по-разному в зависимости от внутреннего формата текстурной базы. Как я могу получить эту информацию из текстуры? Внутренний формат текстурной базы задается с помощью функции glTexImage2D, поэтому мне нужно сохранить ее там в некоторой переменной и передать в шейдер с некоторой униформой в зависимости от связанной текстуры, или я могу получить ее как-то с OpenGL?

Ответы [ 2 ]

0 голосов
/ 22 октября 2009

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

glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`
0 голосов
/ 21 июля 2009

Кажется, что значения смешивания текстур не являются частью встроенной униформы.

http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf

обычно есть два способа имитации поведения FFP:

  1. Один большой шейдер, передавая значения шейдеру ...
  2. Создание шейдеров, например, для каждого поведения и внутреннего формата, динамически по мере необходимости.

Я предпочитаю второй способ, потому что он не приводит к одному большому и медленному универсальному шейдеру. Вместо этого вы получаете небольшие специальные шейдеры.

Дополнительно: эта распространенная проблема известна как проблема «Взрыв комбинаторного шейдера».

...