Вы можете установить режимы наложения для RGB и альфа на различные уравнения:
void glBlendFuncSeparate(
GLenum srcRGB,
GLenum dstRGB,
GLenum srcAlpha,
GLenum dstAlpha);
В вашем случае вы хотите использовать следующие перечисления:
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);
Обратите внимание, что вам может потребоваться импортировать функцию glBlendFuncSeparate как расширение. Это безопасно, хотя. Функция существует очень давно. Это часть OpenGL 1.4
Другой способ сделать то же самое - отключить запись в альфа-канал с помощью glColorMask:
void glColorMask( GLboolean red,
GLboolean green,
GLboolean blue,
GLboolean alpha )
Это может быть намного медленнее, чем glBlendFuncSeparate, поскольку OpenGL-драйверы оптимизируют наиболее часто используемые функции, а glColorMask является одной из редко используемых OpenGL-функций.
Если вам не повезло, вы даже можете закончить программную эмуляцию рендеринга, вызвав странные функции: -)