From 168febe3118fcb8e116dfd143cadfdaab42eadab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=89=E5=A4=B4=E5=90=9B?= Date: Wed, 10 May 2023 11:35:37 +0800 Subject: [PATCH] add libtess2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 小肉头君 --- thirdparty/libtess2/HPKBUILD | 84 +++ thirdparty/libtess2/README.OpenSource | 11 + thirdparty/libtess2/README_zh.md | 12 + thirdparty/libtess2/SHA512SUM | 1 + thirdparty/libtess2/docs/hap_integrate.md | 91 +++ .../docs/pic/libtess2_install_dir.png | Bin 0 -> 19374 bytes .../libtess2/docs/pic/libtess2_test.png | Bin 0 -> 7326 bytes .../libtess2/docs/pic/libtess2_usage.png | Bin 0 -> 65889 bytes thirdparty/libtess2/libtess2_oh_pkg.patch | 532 ++++++++++++++++++ 9 files changed, 731 insertions(+) create mode 100644 thirdparty/libtess2/HPKBUILD create mode 100644 thirdparty/libtess2/README.OpenSource create mode 100644 thirdparty/libtess2/README_zh.md create mode 100644 thirdparty/libtess2/SHA512SUM create mode 100644 thirdparty/libtess2/docs/hap_integrate.md create mode 100644 thirdparty/libtess2/docs/pic/libtess2_install_dir.png create mode 100644 thirdparty/libtess2/docs/pic/libtess2_test.png create mode 100644 thirdparty/libtess2/docs/pic/libtess2_usage.png create mode 100644 thirdparty/libtess2/libtess2_oh_pkg.patch diff --git a/thirdparty/libtess2/HPKBUILD b/thirdparty/libtess2/HPKBUILD new file mode 100644 index 00000000..6fce20c3 --- /dev/null +++ b/thirdparty/libtess2/HPKBUILD @@ -0,0 +1,84 @@ +# Contributor: 小肉头君 +# Maintainer: 小肉头君 + +pkgname=libtess2 +pkgver=v1.0.2 +pkgrel=0 +pkgdesc="Game and tools oriented refactored version of GLU tesselator." +url="https://github.com/memononen/libtess2" +archs=("armeabi-v7a" "arm64-v8a") +license=("SGI FREE SOFTWARE LICENSE B") +depends=() +makedepends=("premake4") +install= +source="https://github.com/memononen/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +downloadpackage=true +patchflag=true +buildtools="make" + +builddir=$pkgname-${pkgver:1} +packagename=$builddir.tar.gz + +cc= +prepare() { + if $patchflag + then + cd $builddir + # 本库example依赖gl相关套件,ohos暂不支持 + # 所以打patch修改example源码,注释gl相关代码,只是进行example的计算(源库是一个算法库),不涉及gl的显示 + # 修改premake4.lua,让example不依赖gl相关套件 + patch -p1 < `pwd`/../libtess2_oh_pkg.patch + # patch只需要打一次,关闭打patch + patchflag=false + cd $OLDPWD + fi + cp -rf $builddir $builddir-$ARCH-build + if [ $ARCH == "armeabi-v7a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clang + fi + if [ $ARCH == "arm64-v8a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clang + fi +} + +build() { + cd $builddir-$ARCH-build + premake4 gmake > `pwd`/build.log 2>&1 + cd $OLDPWD + cd $builddir-$ARCH-build/Build + make CC=${cc} -j4 > `pwd`/build.log 2>&1 + # 对最关键一步的退出码进行判断 + ret=$? + cd $OLDPWD + return $ret +} + +# 安装打包 +package() { + cd $builddir-$ARCH-build + # 源库Makefile 没有make install,这里手动copy到usr目录 + mkdir -p $LYCIUM_ROOT/usr/$pkgname/$ARCH/include/ + mkdir -p $LYCIUM_ROOT/usr/$pkgname/$ARCH/lib/ + cp Source/*.h Include/*.h $LYCIUM_ROOT/usr/$pkgname/$ARCH/include/ + cp Build/libtess2.a $LYCIUM_ROOT/usr/$pkgname/$ARCH/lib/ + cd $OLDPWD + unset cc +} + +# 测试,需要在 ohos 设备上进行 +check() { + echo "The test must be on an OpenHarmony device!" + # ./example + # loading... + # go... + # view0: -34.327606 + # view1: 377.603638 +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir $builddir-armeabi-v7a-build $builddir-arm64-v8a-build #${PWD}/$packagename +} \ No newline at end of file diff --git a/thirdparty/libtess2/README.OpenSource b/thirdparty/libtess2/README.OpenSource new file mode 100644 index 00000000..01cfd9c1 --- /dev/null +++ b/thirdparty/libtess2/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libtess2", + "License": "SGI FREE SOFTWARE LICENSE B", + "License File": "LICENSE.txt", + "Version Number": "v1.0.2",: + "Owner": "chenbaodi@huawei.com", + "Upstream URL": "https://github.com/memononen/libtess2/archive/refs/tags/v1.0.2.tar.gz", + "Description": "Game and tools oriented refactored version of GLU tesselator." + } +] diff --git a/thirdparty/libtess2/README_zh.md b/thirdparty/libtess2/README_zh.md new file mode 100644 index 00000000..bfce4c51 --- /dev/null +++ b/thirdparty/libtess2/README_zh.md @@ -0,0 +1,12 @@ +# libtess2三方库说明 +## 功能简介 +libtess2 可以对复杂多边形进行曲面细分。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Release +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:1.3.1 +- 当前适配的功能:支持对复杂多边形进行曲面细分 +- [SGI FREE SOFTWARE LICENSE B](https://github.com/memononen/libtess2/blob/master/LICENSE.txt) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/libtess2/SHA512SUM b/thirdparty/libtess2/SHA512SUM new file mode 100644 index 00000000..f5650c64 --- /dev/null +++ b/thirdparty/libtess2/SHA512SUM @@ -0,0 +1 @@ +c2b3385c0c54f2f38a01f757c89ae32152f01cc1615a3857a002a1928b0fa1b5344a778de73ef0b53c2131adbf0c3918935ac38781dceefb5daa97cfac8ba231 libtess2-1.0.2.tar.gz diff --git a/thirdparty/libtess2/docs/hap_integrate.md b/thirdparty/libtess2/docs/hap_integrate.md new file mode 100644 index 00000000..76eb4623 --- /dev/null +++ b/thirdparty/libtess2/docs/hap_integrate.md @@ -0,0 +1,91 @@ +# libtess2 集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- ubuntu20.04 +- [OpenHarmony3.2Release镜像](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fdayu200_standard_arm32.tar.gz) +- [ohos_sdk_public 3.2.11.9 (API Version 9 Release)](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fohos-sdk-windows_linux-public.tar.gz) +- [DevEco Studio 3.1 Beta2](https://gitee.com/link?target=https%3A%2F%2Fcontentcenter-vali-drcn.dbankcdn.cn%2Fpvt_2%2FDeveloperAlliance_package_901_9%2Ff3%2Fv3%2FuJyuq3syQ2ak4hE1QZmAug%2Fdevecostudio-windows-3.1.0.400.zip%3FHW-CC-KV%3DV1%26HW-CC-Date%3D20230408T013335Z%26HW-CC-Expire%3D315360000%26HW-CC-Sign%3D96262721EDC9B34E6F62E66884AB7AE2A94C2A7B8C28D6F7FC891F46EB211A70) +- [准备三方库构建环境](../../../tools/README.md#编译环境准备) +- [准备三方库测试环境](../../../tools/README.md#ci环境准备) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/libtess2 #三方库libtess2的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ├── libtess2_oh_pkg.patch + ``` + +- 将libtess2拷贝至tools/main目录下 + + ```shell + cd tpc_c_cplusplus + cp thirdparty/libtess2 tools/main -rf + ``` + +- 在tools目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + + ```shell + cd tools + ./build.sh libtess2 + ``` + +- 三方库头文件及生成的库 + + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + libtess2/arm64-v8a libtess2/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 +   + + ![thirdparty_install_dir](pic/libtess2_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libtess2/${OHOS_ARCH}/lib/libtess2.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libtess2/${OHOS_ARCH}/include) + ``` + + ![libtess2_usage](pic/libtess2_usage.png) + +## 测试三方库 + +三方库的测试使用原库自带的可执行文件来做测试 + +进入到构建目录,再进入tools目录,执行./example(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录) + + ![libtess2_test](pic/libtess2_test.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) \ No newline at end of file diff --git a/thirdparty/libtess2/docs/pic/libtess2_install_dir.png b/thirdparty/libtess2/docs/pic/libtess2_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..acafb7b6b55b7d3ad2ae7a9944809295807bbb2e GIT binary patch literal 19374 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

sG3=)IDaoA(u`Bn&;Gg*8~PiJc%Tuk_WMf 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 dG*WM`fo!h+|z{!GB*Izax9_IKkS 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 R;i2#(Q3BEbQG`9N{s*~#>_h+n literal 0 HcmV?d00001 diff --git a/thirdparty/libtess2/docs/pic/libtess2_usage.png b/thirdparty/libtess2/docs/pic/libtess2_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..a49a7e3810f6f32db867977f6aed1cd617c1b34e GIT binary patch literal 65889 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

    Ibz*~LUhod@V>dAnzj^NeGBjh&`LFS3H~ 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 XpEXtak);3sD{NiY|KWQme_s4wasGU* literal 0 HcmV?d00001 diff --git a/thirdparty/libtess2/libtess2_oh_pkg.patch b/thirdparty/libtess2/libtess2_oh_pkg.patch new file mode 100644 index 00000000..d1d6a6f5 --- /dev/null +++ b/thirdparty/libtess2/libtess2_oh_pkg.patch @@ -0,0 +1,532 @@ +diff -Naur libtess2-1.0.2-old/Example/example.c libtess2-1.0.2-diff/Example/example.c +--- libtess2-1.0.2-old/Example/example.c 2023-05-09 09:05:10.003166275 +0800 ++++ libtess2-1.0.2-diff/Example/example.c 2023-05-09 09:51:02.808161326 +0800 +@@ -3,7 +3,7 @@ + #include + #include + #include +-#include ++//#include + #include "nanosvg.h" + #include "tesselator.h" + +@@ -52,28 +52,28 @@ + + + // Undefine this to see non-interactive heap allocator version. +-#define USE_POOL 1 ++#define USE_POOL 0 + + + int run = 1; + int cdt = 0; + +-static void key(GLFWwindow* window, int key, int scancode, int action, int mods) +-{ +- TESS_NOTUSED(scancode); +- TESS_NOTUSED(mods); +- if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) +- glfwSetWindowShouldClose(window, GL_TRUE); +- if (key == GLFW_KEY_SPACE && action == GLFW_PRESS) +- run = !run; +- if (key == GLFW_KEY_C && action == GLFW_PRESS) +- cdt = !cdt; +-} ++//static void key(GLFWwindow* window, int key, int scancode, int action, int mods) ++//{ ++// TESS_NOTUSED(scancode); ++// TESS_NOTUSED(mods); ++// if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) ++// glfwSetWindowShouldClose(window, GL_TRUE); ++// if (key == GLFW_KEY_SPACE && action == GLFW_PRESS) ++// run = !run; ++// if (key == GLFW_KEY_C && action == GLFW_PRESS) ++// cdt = !cdt; ++//} + + int main(int argc, char *argv[]) + { +- GLFWwindow* window; +- const GLFWvidmode* mode; ++// GLFWwindow* window; ++// const GLFWvidmode* mode; + int width,height,i,j; + struct SVGPath* bg; + struct SVGPath* fg; +@@ -84,21 +84,21 @@ + TESStesselator* tess = 0; + const int nvp = 3; + unsigned char* vflags = 0; +-#ifdef USE_POOL +- struct MemPool pool; +- unsigned char mem[1024*1024]; +- int nvflags = 0; +-#else ++//#ifdef USE_POOL ++// struct MemPool pool; ++// unsigned char mem[1024*1024]; ++// int nvflags = 0; ++//#else + int allocated = 0; + double t0 = 0, t1 = 0; +-#endif +- TESS_NOTUSED(argc); +- TESS_NOTUSED(argv); +- +- if (!glfwInit()) { +- printf("Failed to init GLFW."); +- return -1; +- } ++//#endif ++ TESS_NOTUSED(argc); ++ TESS_NOTUSED(argv); ++ ++// if (!glfwInit()) { ++// printf("Failed to init GLFW."); ++// return -1; ++// } + + printf("loading...\n"); + // Load assets +@@ -159,20 +159,20 @@ + } + } + +-#ifdef USE_POOL +- +- pool.size = 0; +- pool.cap = sizeof(mem); +- pool.buf = mem; +- memset(&ma, 0, sizeof(ma)); +- ma.memalloc = poolAlloc; +- ma.memfree = poolFree; +- ma.userData = (void*)&pool; +- ma.extraVertices = 256; // realloc not provided, allow 256 extra vertices. ++//#ifdef USE_POOL ++// ++// pool.size = 0; ++// pool.cap = sizeof(mem); ++// pool.buf = mem; ++// memset(&ma, 0, sizeof(ma)); ++// ma.memalloc = poolAlloc; ++// ma.memfree = poolFree; ++// ma.userData = (void*)&pool; ++// ma.extraVertices = 256; // realloc not provided, allow 256 extra vertices. ++// ++//#else + +-#else +- +- t0 = glfwGetTime(); ++// t0 = glfwGetTime(); + + memset(&ma, 0, sizeof(ma)); + ma.memalloc = stdAlloc; +@@ -206,26 +206,26 @@ + if (!tessTesselate(tess, TESS_WINDING_POSITIVE, TESS_POLYGONS, nvp, 2, 0)) + return -1; + +- t1 = glfwGetTime(); +- +- printf("Time: %.3f ms\n", (t1 - t0) * 1000.0f); +- printf("Memory used: %.1f kB\n", allocated/1024.0f); ++// t1 = glfwGetTime(); ++// ++// printf("Time: %.3f ms\n", (t1 - t0) * 1000.0f); ++// printf("Memory used: %.1f kB\n", allocated/1024.0f); ++ ++//#endif ++ ++// mode = glfwGetVideoMode(glfwGetPrimaryMonitor()); ++// width = mode->width - 40; ++// height = mode->height - 80; ++// window = glfwCreateWindow(width, height, "Libtess2 Demo", NULL, NULL); ++// if (!window) { ++// glfwTerminate(); ++// return -1; ++// } + +-#endif ++// glfwSetKeyCallback(window, key); ++// glfwMakeContextCurrent(window); + +- mode = glfwGetVideoMode(glfwGetPrimaryMonitor()); +- width = mode->width - 40; +- height = mode->height - 80; +- window = glfwCreateWindow(width, height, "Libtess2 Demo", NULL, NULL); +- if (!window) { +- glfwTerminate(); +- return -1; +- } +- +- glfwSetKeyCallback(window, key); +- glfwMakeContextCurrent(window); +- +- // Adjust bounds so that we get nice view of the bg. ++ // Adjust bounds so that we get nice view of the bg. + cx = (bounds[0]+bounds[2])/2; + cy = (bounds[3]+bounds[1])/2; + w = (bounds[2]-bounds[0])/2; +@@ -233,176 +233,178 @@ + view[2] = cx + w*1.2f; + view[1] = cy - w*1.2f*(float)height/(float)width; + view[3] = cy + w*1.2f*(float)height/(float)width; ++ ++ printf("view0: %f\n", view[0]); ++ printf("view1: %f\n", view[2]); ++// glfwSetTime(0); ++// ++// while (!glfwWindowShouldClose(window)) ++// { ++// int winWidth, winHeight; ++// int fbWidth, fbHeight; ++// float pxr, ct; ++// ++// glfwGetWindowSize(window, &winWidth, &winHeight); ++// glfwGetFramebufferSize(window, &fbWidth, &fbHeight); ++// ++// // Calculate pixel ration for hi-dpi devices. ++// pxr = (float)fbWidth / (float)winWidth; ++// ++// ct = (float)glfwGetTime(); ++// if (run) t += ct - pt; ++// pt = ct; ++// ++// // Update and render ++// glViewport(0, 0, fbWidth, fbHeight); ++// glClearColor(0.3f, 0.3f, 0.32f, 1.0f); ++// glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); ++// glEnable(GL_BLEND); ++// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); ++// glDisable(GL_TEXTURE_2D); ++// glMatrixMode(GL_PROJECTION); ++// glLoadIdentity(); ++// glOrtho(view[0],view[2],view[1],view[3],-1,1); ++// glMatrixMode(GL_MODELVIEW); ++// glLoadIdentity(); ++// glDisable(GL_DEPTH_TEST); ++// glEnable(GL_BLEND); ++// glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); ++// ++//#ifdef USE_POOL ++// pool.size = 0; // reset pool ++// tess = tessNewTess(&ma); ++// if (tess) ++// { ++// tessSetOption(tess, TESS_CONSTRAINED_DELAUNAY_TRIANGULATION, cdt); ++// ++// offx = (view[2]+view[0])/2 + sinf(t) * (view[2]-view[0])/2; ++// offy = (view[3]+view[1])/2 + cosf(t*3.13f) * (view[3]-view[1])/6; ++// ++// for (it = fg; it != NULL; it = it->next) ++// { ++// for (i = 0; i < it->npts; ++i) ++// { ++// it->pts[i*2] += offx; ++// it->pts[i*2+1] += offy; ++// } ++// } ++// ++// for (it = bg; it != NULL; it = it->next) ++// tessAddContour(tess, 2, it->pts, sizeof(float)*2, it->npts); ++// for (it = fg; it != NULL; it = it->next) ++// tessAddContour(tess, 2, it->pts, sizeof(float)*2, it->npts); ++// ++// for (it = fg; it != NULL; it = it->next) ++// { ++// for (i = 0; i < it->npts; ++i) ++// { ++// it->pts[i*2] -= offx; ++// it->pts[i*2+1] -= offy; ++// } ++// } ++// ++// // First combine contours and then triangulate, this removes unnecessary inner vertices. ++// if (tessTesselate(tess, TESS_WINDING_POSITIVE, TESS_BOUNDARY_CONTOURS, 0, 0, 0)) ++// { ++// const float* verts = tessGetVertices(tess); ++// const int* vinds = tessGetVertexIndices(tess); ++// const int nverts = tessGetVertexCount(tess); ++// const int* elems = tessGetElements(tess); ++// const int nelems = tessGetElementCount(tess); ++// ++// if (nverts > nvflags) ++// { ++// if (vflags) ++// free(vflags); ++// nvflags = nverts; ++// vflags = (unsigned char*)malloc(sizeof(unsigned char)*nvflags); ++// } ++// ++// if (vflags) ++// { ++// // Vertex indices describe the order the indices were added and can be used ++// // to map the tesselator output to input. Vertices marked as TESS_UNDEF ++// // are the ones that were created at the intersection of segments. ++// // That is, if vflags is set it means that the vertex comes from intersegment. ++// for (i = 0; i < nverts; ++i) ++// vflags[i] = vinds[i] == TESS_UNDEF ? 1 : 0; ++// } ++// ++// for (i = 0; i < nelems; ++i) ++// { ++// int b = elems[i*2]; ++// int n = elems[i*2+1]; ++// tessAddContour(tess, 2, &verts[b*2], sizeof(float)*2, n); ++// } ++// if (!tessTesselate(tess, TESS_WINDING_POSITIVE, TESS_POLYGONS, nvp, 2, 0)) ++// tess = 0; ++// } ++// else ++// tess = 0; ++// } ++//#endif ++// ++// // Draw tesselated pieces. ++// if (tess) ++// { ++// const float* verts = tessGetVertices(tess); ++// const int* vinds = tessGetVertexIndices(tess); ++// const int* elems = tessGetElements(tess); ++// const int nverts = tessGetVertexCount(tess); ++// const int nelems = tessGetElementCount(tess); ++// ++// // Draw polygons. ++// glColor4ub(255,255,255,128); ++// for (i = 0; i < nelems; ++i) ++// { ++// const int* p = &elems[i*nvp]; ++// glBegin(GL_TRIANGLE_FAN); ++// for (j = 0; j < nvp && p[j] != TESS_UNDEF; ++j) ++// glVertex2f(verts[p[j]*2], verts[p[j]*2+1]); ++// glEnd(); ++// } ++// ++// glLineWidth(1.0f * pxr); ++// glPointSize(3.0f * pxr); ++// ++// glColor4ub(0,0,0,16); ++// for (i = 0; i < nelems; ++i) ++// { ++// const int* p = &elems[i*nvp]; ++// glBegin(GL_LINE_LOOP); ++// for (j = 0; j < nvp && p[j] != TESS_UNDEF; ++j) ++// glVertex2f(verts[p[j]*2], verts[p[j]*2+1]); ++// glEnd(); ++// } ++// ++// glColor4ub(0,0,0,128); ++// glBegin(GL_POINTS); ++// for (i = 0; i < nverts; ++i) ++// { ++// if (vflags && vflags[vinds[i]]) ++// glColor4ub(255,0,0,192); ++// else ++// glColor4ub(0,0,0,128); ++// glVertex2f(verts[i*2], verts[i*2+1]); ++// } ++// glEnd(); ++// ++// glPointSize(1.0f); ++// } ++// ++// glEnable(GL_DEPTH_TEST); ++// glfwSwapBuffers(window); ++// glfwPollEvents(); ++// } ++// ++// if (tess) tessDeleteTess(tess); ++// ++// if (vflags) ++// free(vflags); ++// ++// svgDelete(bg); ++// svgDelete(fg); + +- glfwSetTime(0); +- +- while (!glfwWindowShouldClose(window)) +- { +- int winWidth, winHeight; +- int fbWidth, fbHeight; +- float pxr, ct; +- +- glfwGetWindowSize(window, &winWidth, &winHeight); +- glfwGetFramebufferSize(window, &fbWidth, &fbHeight); +- +- // Calculate pixel ration for hi-dpi devices. +- pxr = (float)fbWidth / (float)winWidth; +- +- ct = (float)glfwGetTime(); +- if (run) t += ct - pt; +- pt = ct; +- +- // Update and render +- glViewport(0, 0, fbWidth, fbHeight); +- glClearColor(0.3f, 0.3f, 0.32f, 1.0f); +- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); +- glEnable(GL_BLEND); +- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +- glDisable(GL_TEXTURE_2D); +- glMatrixMode(GL_PROJECTION); +- glLoadIdentity(); +- glOrtho(view[0],view[2],view[1],view[3],-1,1); +- glMatrixMode(GL_MODELVIEW); +- glLoadIdentity(); +- glDisable(GL_DEPTH_TEST); +- glEnable(GL_BLEND); +- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); +- +-#ifdef USE_POOL +- pool.size = 0; // reset pool +- tess = tessNewTess(&ma); +- if (tess) +- { +- tessSetOption(tess, TESS_CONSTRAINED_DELAUNAY_TRIANGULATION, cdt); +- +- offx = (view[2]+view[0])/2 + sinf(t) * (view[2]-view[0])/2; +- offy = (view[3]+view[1])/2 + cosf(t*3.13f) * (view[3]-view[1])/6; +- +- for (it = fg; it != NULL; it = it->next) +- { +- for (i = 0; i < it->npts; ++i) +- { +- it->pts[i*2] += offx; +- it->pts[i*2+1] += offy; +- } +- } +- +- for (it = bg; it != NULL; it = it->next) +- tessAddContour(tess, 2, it->pts, sizeof(float)*2, it->npts); +- for (it = fg; it != NULL; it = it->next) +- tessAddContour(tess, 2, it->pts, sizeof(float)*2, it->npts); +- +- for (it = fg; it != NULL; it = it->next) +- { +- for (i = 0; i < it->npts; ++i) +- { +- it->pts[i*2] -= offx; +- it->pts[i*2+1] -= offy; +- } +- } +- +- // First combine contours and then triangulate, this removes unnecessary inner vertices. +- if (tessTesselate(tess, TESS_WINDING_POSITIVE, TESS_BOUNDARY_CONTOURS, 0, 0, 0)) +- { +- const float* verts = tessGetVertices(tess); +- const int* vinds = tessGetVertexIndices(tess); +- const int nverts = tessGetVertexCount(tess); +- const int* elems = tessGetElements(tess); +- const int nelems = tessGetElementCount(tess); +- +- if (nverts > nvflags) +- { +- if (vflags) +- free(vflags); +- nvflags = nverts; +- vflags = (unsigned char*)malloc(sizeof(unsigned char)*nvflags); +- } +- +- if (vflags) +- { +- // Vertex indices describe the order the indices were added and can be used +- // to map the tesselator output to input. Vertices marked as TESS_UNDEF +- // are the ones that were created at the intersection of segments. +- // That is, if vflags is set it means that the vertex comes from intersegment. +- for (i = 0; i < nverts; ++i) +- vflags[i] = vinds[i] == TESS_UNDEF ? 1 : 0; +- } +- +- for (i = 0; i < nelems; ++i) +- { +- int b = elems[i*2]; +- int n = elems[i*2+1]; +- tessAddContour(tess, 2, &verts[b*2], sizeof(float)*2, n); +- } +- if (!tessTesselate(tess, TESS_WINDING_POSITIVE, TESS_POLYGONS, nvp, 2, 0)) +- tess = 0; +- } +- else +- tess = 0; +- } +-#endif +- +- // Draw tesselated pieces. +- if (tess) +- { +- const float* verts = tessGetVertices(tess); +- const int* vinds = tessGetVertexIndices(tess); +- const int* elems = tessGetElements(tess); +- const int nverts = tessGetVertexCount(tess); +- const int nelems = tessGetElementCount(tess); +- +- // Draw polygons. +- glColor4ub(255,255,255,128); +- for (i = 0; i < nelems; ++i) +- { +- const int* p = &elems[i*nvp]; +- glBegin(GL_TRIANGLE_FAN); +- for (j = 0; j < nvp && p[j] != TESS_UNDEF; ++j) +- glVertex2f(verts[p[j]*2], verts[p[j]*2+1]); +- glEnd(); +- } +- +- glLineWidth(1.0f * pxr); +- glPointSize(3.0f * pxr); +- +- glColor4ub(0,0,0,16); +- for (i = 0; i < nelems; ++i) +- { +- const int* p = &elems[i*nvp]; +- glBegin(GL_LINE_LOOP); +- for (j = 0; j < nvp && p[j] != TESS_UNDEF; ++j) +- glVertex2f(verts[p[j]*2], verts[p[j]*2+1]); +- glEnd(); +- } +- +- glColor4ub(0,0,0,128); +- glBegin(GL_POINTS); +- for (i = 0; i < nverts; ++i) +- { +- if (vflags && vflags[vinds[i]]) +- glColor4ub(255,0,0,192); +- else +- glColor4ub(0,0,0,128); +- glVertex2f(verts[i*2], verts[i*2+1]); +- } +- glEnd(); +- +- glPointSize(1.0f); +- } +- +- glEnable(GL_DEPTH_TEST); +- glfwSwapBuffers(window); +- glfwPollEvents(); +- } +- +- if (tess) tessDeleteTess(tess); +- +- if (vflags) +- free(vflags); +- +- svgDelete(bg); +- svgDelete(fg); +- +- glfwTerminate(); ++// glfwTerminate(); + return 0; + } +diff -Naur libtess2-1.0.2-old/premake4.lua libtess2-1.0.2-diff/premake4.lua +--- libtess2-1.0.2-old/premake4.lua 2023-05-09 09:05:10.003166275 +0800 ++++ libtess2-1.0.2-diff/premake4.lua 2023-05-09 09:17:09.481460783 +0800 +@@ -32,9 +32,7 @@ + targetdir("Build") + + configuration { "linux" } +- linkoptions { "`pkg-config --libs glfw3`" } +- links { "GL", "GLU", "m", "GLEW" } +- defines { "NANOVG_GLEW" } ++ links {"m"} + + configuration { "windows" } + links { "glfw3", "gdi32", "winmm", "user32", "GLEW", "glu32","opengl32" } -- Gitee