Я недавно внедрил Awesomium в приложение OpenGL.
Когда я загружаю Awesomium в текстуру, OpenGL включает его в процесс затенения независимо от того, рисую я текстуру на поверхности или нет.
Я пытаюсь проследить строку кода, которая обрабатывает текстуру, в шейдеры. Существует ли конкретная функция, используемая OpenGL для доступа ко всем текстурам, или способ сказать OpenGL игнорировать текстуру?
Обновить блок текстуры
glBindTexture(GL_TEXTURE_2D, SkypeHUD);
glTexImage2D(GL_TEXTURE_2D, 0, 4, AwesomiumW, AwesomiumH, 0, GL_BGRA, GL_UNSIGNED_BYTE, surface->buffer());
Создать текстурный блок
glBindTexture(GL_TEXTURE_2D, SkypeHUD);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glBindTexture(GL_TEXTURE_2D, 0);
Рисование сцены без загрузки текстуры: http://puu.sh/2bVTV
Рисование сцены после того, как я загрузил текстуру: http://puu.sh/2bVUb
Вы можете видеть это, смешивая текстуру Google с другими.
Включение / отключение текстуры должно контролироваться кодом шейдера, а не каким-либо состоянием привязки клиента. В любом случае, вы, скорее всего, используете несколько текстурных блоков (glActiveTexture); привязка текстур индивидуальна для каждого юнита, поэтому вам нужно будет выполнить некоторую работу ног и отсоединить текстуры от каждого юнита, если вы хотите пойти по этому пути.
Других решений пока нет …