Списки отображения создаются один раз, именно в тот момент, когда вы вызываете glNewList. Этот список затем повторяется дословно, когда вы вызываете glCallList. Я не уверен, что именно вы подразумеваете под параметром, но если вы имеете в виду:
a) переменная C ++, то это не будет иметь никакого эффекта. Вызовы OpenGL в списке отображения записываются как есть. Какие переменные цикла и т. Д. Используются для получения этого вызова, не записываются. б) переменная состояния OpenGL (например, вызов для включения GL_LIGHTING). Это будет записано (так как список отображения будет захватывать вызов glEnable).
glClear не влияет на списки отображения. glClear просто очищает задний буфер до черного (или цвет, который вы устанавливаете через glClearColor)Очевидно, что после того, как вы очистили все данные пикселей, вам нужно будет перерисовать их снова, поэтому вам нужно будет установить матрицу проекции, установить правильную матрицу преобразования для вашей геометрии в списке отображения и снова вызвать glCallList, чтобы повторитьсписок действий в этом списке.
Сказав все это, я настоятельно рекомендую избегать отображения списков отображения и перейти к чему-то более приятному (например, VBO + VAO + GLSL-шейдеры или VBO + конвейер с фиксированными функциями). Списки отображения имеют большое количество проблем, в том числе:
- Это кошмар для сопровождающих водителей. В результате поддержка видеокарт для них - немного смешанная сумка.
- Не все методы GL API допустимы для вызова в списке отображения. Некоторые методы (например, те, которые изменяют состояние клиента - например, привязки к массиву вершин) просто не работают в списках отображения. Другие не работают просто потому, что разработчики драйверов решили не добавлять поддержку (например, NVidia позволяет вызывать некоторые методы GL3 + в списке отображения, AMD допускает только методы из OpenGL 1.5).
- Обновление списка отображения мучительно медленно.