Поделиться через


Определение обратных вызовов

Вы можете указать до пяти функций обратного вызова для тесселяции. Любые функции, которые вы не указываете, не вызываются во время тесселяции, и вы не получаете никакой информации, которую они могли бы вернуть. Вы указываете функции обратного вызова с 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.