Определение обратных вызовов
Вы можете указать до пяти функций обратного вызова для тесселяции. Любые функции, которые вы не указываете, не вызываются во время тесселяции, и вы не получаете никакой информации, которую они могли бы вернуть. Вы указываете функции обратного вызова с gluTessCallback.
Функция gluTessCallback связывает функцию обратного вызова fn с объектом тесселяции tessobj. Тип обратного вызова определяется типом параметра, который может быть GLU_BEGIN, GLU_EDGE_FLAG, GLU_VERTEX, GLU_END или GLU_ERROR. Пять возможных функций обратного вызова имеют следующие прототипы.
Функция обратного вызова | Прототип |
---|---|
GLU_BEGIN | voidbegin(тип GLenum); |
GLU_EDGE_FLAG | voidedgeFlag(GLbooleanflag ); |
GLU_VERTEX | voidvertex(**void ***data ); |
GLU_END | voidend(void); |
GLU_ERROR | voidошибка(GLenumerrno ); |
Чтобы изменить функцию обратного вызова, вызовите gluTesSCallback с новой функцией. Чтобы исключить функцию обратного вызова, не заменив ее новым, передайте в gluTessCallback пустой указатель для соответствующей функции.
По мере продолжения тесселяции функции обратного вызова вызываются таким образом, как вы будете использовать функции OpenGL glBegin, glEdgeFlag, glVertex и glEnd.
Функция обратного вызова GLU_BEGIN вызывается одним из трех возможных параметров:
- GL_TRIANGLE_FAN
- GL_TRIANGLE_STRIP
- GL_TRIANGLES
После вызова обратной функции GLU_BEGIN и до вызова связанной с GLU_END, срабатывает некоторая комбинация обратных вызовов GLU_EDGE_FLAG и GLU_VERTEX. Связанные вершины и пограничные флаги интерпретируются точно так же, как они находятся в OpenGL между glBegin(GL_TRIANGLE_FAN), glBegin(GL_TRIANGLE_STRIP), или glBegin(GL_TRIANGLES**)** и соответствующим glEnd.
Поскольку флаги края не имеют смысла в вентиляционной структуре треугольников или ленточной структуре треугольников, если с GLU_EDGE_FLAG связана функция обратного вызова, обратный вызов GLU_BEGIN вызывается только с GL_TRIANGLES. Функция обратного вызова GLU_EDGE_FLAG работает аналогично функции OpenGL glEdgeFlag .
Если во время тесселяции возникает ошибка, вызывается функция обратного вызова. Функция обратного вызова ошибки передается номер ошибки GLU. Вы можете получить символьную строку, описывающую ошибку с помощью функции gluErrorString.