Указание обратных вызовов
Для тесселяции можно указать до пяти функций обратного вызова. Все функции, которые не указываются, не вызываются во время тесселяции, и вы не получаете никакой информации, которую они могли вернуть. Вы указываете функции обратного вызова с помощью gluTessCallback.
Функция gluTessCallback связывает функцию обратного вызова с объектом tessellation tessobj. Тип обратного вызова определяется типом параметра, который может быть GLU_BEGIN, GLU_EDGE_FLAG, GLU_VERTEX, GLU_END или GLU_ERROR. Пять возможных функций обратного вызова имеют следующие прототипы.
Функция обратного вызова | Прототип |
---|---|
GLU_BEGIN | void begin(тип GLenum); |
GLU_EDGE_FLAG | void edgeFlag(GLbooleanflag ); |
GLU_VERTEX | void vertex(*void **void **data ); |
GLU_END | void end(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.