glClearColor
не выполняет самоочищение - оно просто устанавливает, каким будет цвет, когда вы действительно очищаете. Чтобы выполнить очистку, вам нужно позвонить glClear
с (как минимум) COLOR_BUFFER_BIT
.
Редактировать: прошло довольно много времени с тех пор, как я использовал перенасыщение, поэтому детали могут быть неверными, но если память не изменяет цвет экрана в ответ на нажатие клавиши на клавиатуре, вы должны сделать что-то вроде это:
void keyboard (unsigned char key, int x, int y)
{
// we'll switch between red and blue when the user presses a key:
GLfloat colors[][3] = { { 0.0f, 0.0f, 1.0f}, {1.0f, 0.0f, 0.0f } };
static int back;
switch (key) {
case 27:
exit(0);
default:
back ^= 1;
glClearColor(colors[back][0], colors[back][1], colors[back][2], 1.0f);
glutPostRedisplay();
}
}
void draw() {
glClear(GL_COLOR_BUFFER_BIT);
// other drawing here...
}
int main() {
// glutInit, glutInitDisplayMode, etc.
glutDisplayFunc(draw);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
По сути, вы делаете все свои рисунки в любой функции, которую вы передаете glutDisplayFunc
. Почти все остальное просто меняет состояние, а затем вызывает PostRedisplayFunc();
, чтобы сообщить glut, что окно необходимо перерисовать. Предупреждение: как я уже сказал, прошло много времени с тех пор, как я использовал glut, и я не тестировал этот код. Насколько я помню, он показывает общую структуру программы перенасыщения, но не ожидайте, что она будет работать так, как есть.