var tessy = (function initTesselator() { // function called for each vertex of tesselator output function vertexCallback(data, polyVertArray) { // console.log(data[0], data[1]); polyVertArray[polyVertArray.length] = data[0]; polyVertArray[polyVertArray.length] = data[1]; } function begincallback(type) { if (type !== libtess.primitiveType.GL_TRIANGLES) { console.log('expected TRIANGLES but got type: ' + type); } } function errorcallback(errno) { console.log('error callback'); console.log('error number: ' + errno); } // callback for when segments intersect and must be split function combinecallback(coords, data, weight) { // console.log('combine callback'); return [coords[0], coords[1], coords[2]]; } function edgeCallback(flag) { // don't really care about the flag, but need no-strip/no-fan behavior // console.log('edge flag: ' + flag); } var tessy = new libtess.GluTesselator(); // tessy.gluTessProperty(libtess.gluEnum.GLU_TESS_WINDING_RULE, libtess.windingRule.GLU_TESS_WINDING_POSITIVE); tessy.gluTessCallback(libtess.gluEnum.GLU_TESS_VERTEX_DATA, vertexCallback); tessy.gluTessCallback(libtess.gluEnum.GLU_TESS_BEGIN, begincallback); tessy.gluTessCallback(libtess.gluEnum.GLU_TESS_ERROR, errorcallback); tessy.gluTessCallback(libtess.gluEnum.GLU_TESS_COMBINE, combinecallback); tessy.gluTessCallback(libtess.gluEnum.GLU_TESS_EDGE_FLAG, edgeCallback); return tessy; })();