Обрезка альфа-значений с низким OpenGL
Я ввел DLL в игровой процесс, чтобы создать оверлейный интерфейс, но проблема в том, что альфа-значения "обрезаются" (не отображаются вообще)
Я проверил несколько значений альфа-канала, и, похоже, он не работает, если альфа ниже 0,3.
Чтобы проиллюстрировать, что происходит, изображение, которое я пытаюсь визуализировать:
и игра рендеринга изображения:
Что именно здесь происходит? Это текущее состояние OpenGL? Я новичок в API, и я понятия не имею, почему это происходит.
Дополнительная информация:
Текстура создается из буфера с:
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, this->width, this->height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, this->buffer);
Я получаю этот буфер от Awesomium, и значения верны... Я проверил альфа-значения.
Рендеринг выполняется с помощью этой функции (я тоже пытался вызвать функцию рендеринга текстур в игре, но возникает та же проблема):
void DrawTextureExt(int texture, float x, float y, float width, float height)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
{
glPushMatrix();
{
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// glBlendFunc(GL_ONE, GL_ONE); << tried this too.. ugly results
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTranslatef(x, y, 0.0);
glRotatef(0, 0.0, 0.0, 1.0);
glTranslatef(-x, -y, 0.0);
glBegin(GL_QUADS);
{
glTexCoord2f(0, 0); glVertex2f(x, y);
glTexCoord2f(0, 1); glVertex2f(x, y + height);
glTexCoord2f(1, 1); glVertex2f(x + width, y + height);
glTexCoord2f(1, 0); glVertex2f(x + width, y);
}
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
}
glPopMatrix();
}
glPopAttrib();
}
1 ответ
Похоже на то, что программа, в которую вы зацепились, использует альфа-тесты в конце своей функции рендеринга (что имело бы смысл) и оставила альфа-тестирование включенным в конце, с которым вы затем работаете. Попробуйте, что произойдет, если вы сначала отключите альфа-тест в своем хуке. (glDiable(GL_ALPHA_TEST)
).