void MyEnableLights(int n)
{
int i;
static int lastN = 0;
if (n < lastN) {
for (i = n; i < lastN; i++) {
glDisable(GL_LIGHT0 + i);
}
} else if (n > lastN) {
for (i = lastN; i < n; i++) {
glEnable(GL_LIGHT0 + i);
}
}
}
enum BLEND_MODE {
NO_BLENDING,
TRANSPARENCY,
TRANSPARENCY_ADDITIVE,
ADDITIVE,
SRC_TIMES_DST,
BLEND_MODE_COUNT,
};
GLenum blendModeTable[BLEND_MODE_COUNT][2] = {
GL_ONE, GL_ZERO,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE,
GL_ONE, GL_ONE,
GL_ZERO, GL_SRC_COLOR,
};
static void MyBlendFunc(BLEND_MODE mode)
{
static BLEND_MODE lastMode = NO_BLENDING;
if (mode == lastMode) {
return;
}
if (mode == NO_BLENDING) {
glDisable(GL_BLEND);
} else {
if (lastMode == NO_BLENDING) {
glEnable(GL_BLEND);
}
glBlendFunc(blendModeTable[mode][0], blendModeTable[mode][1]);
}
lastMode = mode;
}