OpenGL: отключить несколько текстурных блоков - PullRequest
5 голосов
/ 18 апреля 2011

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

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

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

Ответы [ 2 ]

10 голосов
/ 18 апреля 2011

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

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

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

1 голос
/ 18 апреля 2011

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

...