OpenGL: отключите несколько текстурных блоков

Как отключить несколько текстурных блоков, потому что они влияют на другие части рендера. Я активирую их:

        glActiveTexture(GL_TEXTURE0 + index);
        glBindTexture(GL_TEXTURE_2D,
               ((MaterialSampler2D)specular).texture.getTOB());
        shader.setTexture2(index);

Есть ли что-то вроде glDeactivateTexture?


person itun    schedule 18.04.2011    source источник


Ответы (2)


glActiveTexture не активирует текстурные блоки. Он просто выбирает, какой модуль текстуры вы изменяете в данный момент (да, управление состоянием объекта в OpenGL ужасно). Вы активируете текстуры с помощью glEnable(<texture-target>) и glDisable(<texture-target>). В вашем случае целью будет GL_TEXTURE_2D.

Итак, чтобы ответить на ваш вопрос: выберите текстурный блок i с помощью glActiveTexture(GL_TEXTURE0+i), а затем отключите его с помощью glDisable(GL_TEXTURE_2D).

Учтите, что с шейдерами все это избыточно — там можно просто не получить доступ к значениям.

person ltjax    schedule 18.04.2011
comment
Я использую шейдер, и мне не нужно использовать glEnable/glDisable(GL_TEXTURE_2D), не так ли? А я этим пользуюсь, мне не помогает. - person itun; 18.04.2011
comment
Точно, за исключением некоторых хитрых драйверов, которые глючат (и я думаю, что была ошибка, которая влияла на эту проблему в драйверах ATI в свое время) - person ltjax; 18.04.2011

Вы имеете в виду что-то вроде glDisable? http://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml

person Bart    schedule 18.04.2011
comment
Как вы думаете, какое значение аргумента мне поможет? - person itun; 18.04.2011
comment
пришло мне в голову что-то вроде glActiveTexture(GL_TEXTURE0); glDisable(GL_TEXTURE_2D); Не уверены, что это то, что вы собираетесь делать? - person Bart; 18.04.2011