Как видно из названия, всякий раз, когда я включаю смешивание следующим образом:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Я не могу нарисовать текстуру, используя немедленный режим. Это текстура RGBA. Я подтвердил, что загрузка и генерация изображений работает правильно, поскольку, когда я «загружал» пиксель из графического процессора для отладки, значения альфа-канала казались правильными (например, не все из них были 255). Тем не менее, текстура просто исчезает при ее рисовании с включенным смешиванием:
glColor4ub(255, 255, 255, 0);
_texture->setActive(0);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(_x, _y);
glTexCoord2f(1.0f, 0.0f);
glVertex2f(_x + _width, _y);
glTexCoord2f(1.0f, 1.0f);
glVertex2f(_x + _width, _y + _height);
glTexCoord2f(0.0f, 1.0f);
glVertex2f(_x, _y + _height);
glEnd();
куда _texture->setActive()
просто называет это:
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(GL_TEXTURE_2D, m_ID);
Без наложения получаю следующий результат:
Но при смешивании он просто ничего не рисует (опять же, альфа-значения текстуры подтверждаются правильными!):
Когда это должно выглядеть примерно так:
В чем здесь проблема?
После применения glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
Теперь я получаю ожидаемый результат:
Я думаю, что нашел это:
glColor4ub(255, 255, 255, 0);
Предполагая, что вы примените текстуру с помощью GL_MODULATE, альфа будет смешана с «примитивным» цветом. Если установить альфа примитива на 0, то любое смешение с текстурой будет заканчиваться 0 альфа.
Я не уверен, что вы хотите сделать, поэтому я предлагаю сделать одно из следующего:
Для версий OpenGL 1.3 и выше, или когда ARB_multitexture
расширение поддерживается, glTexEnv контролирует текстуру среды для
текущий активный текстурный блок, выбрано glActiveTexture
Других решений пока нет …