Definování zpětných volání
Pro tessellation můžete zadat až pět funkcí zpětného volání. Všechny funkce, které nezadáte, se během tessellace nevolají a nezískají žádné informace, které by mohly vrátit. Funkce zpětného volání zadáte pomocí gluTessCallback.
Funkce gluTessCallback propojí funkci zpětného volání fn s tesselačním objektem tessobj. Typ zpětného volání je určen parametrem typ, který může být GLU_BEGIN, GLU_EDGE_FLAG, GLU_VERTEX, GLU_ENDnebo GLU_ERROR. Pět možných funkcí zpětného volání má následující prototypy.
Funkce zpětného volání | Prototyp |
---|---|
GLU_BEGIN | začátek(GLenumtypu ); |
GLU_EDGE_FLAG | voidedgeFlag(GLboolean příznakflag); |
GLU_VERTEX | vrcholů (**void ***dat ); |
GLU_END | konec( void ); |
GLU_ERROR | void(GLenumerrno ); |
Pokud chcete změnit funkci zpětného volání, zavolejte gluTessCallback s novou funkcí. Chcete-li odstranit funkci zpětného volání bez nahrazení novou funkcí, předejte gluTessCallback ukazatel null příslušné funkce.
Při tessellation se funkce zpětného volání volají způsobem podobným tomu, jakým byste používali funkce OpenGL glBegin, glEdgeFlag, glVertexa glEnd.
Funkce zpětného volání GLU_BEGIN se vyvolá jednou ze tří možných parametrů:
- GL_TRIANGLE_FAN
- GL_TRIANGLE_STRIP
- GL_TRIANGLES
Po volání funkce zpětného volání GLU_BEGIN, a před voláním funkce zpětného volání asociované s GLU_END, je vyvolána některá kombinace funkcí zpětného volání GLU_EDGE_FLAG a GLU_VERTEX. Přidružené vrcholy a příznaky hran jsou interpretovány přesně tak, jak jsou v OpenGL mezi glBegin(GL_TRIANGLE_FAN), glBegin(GL_TRIANGLE_STRIP) nebo glBegin(GL_TRIANGLES**)** a odpovídajícími glEnd.
Vzhledem k tomu, že příznaky okrajů nemají smysl v trojúhelníkovém vějíři nebo trojúhelníkovém pásu, pokud je funkce zpětného volání přidružená k GLU_EDGE_FLAG, je GLU_BEGIN zpětné volání voláno pouze s GL_TRIANGLES. Funkce zpětného volání GLU_EDGE_FLAG funguje podobně jako funkce glEdgeFlag OpenGL.
Pokud během tesselace dojde k chybě, funkce zpětného volání chyby je vyvolána. Číslo chyby GLU je předáno funkci zpětného volání. Řetězec znaků popisující chybu můžete získat pomocí funkce gluErrorString.