更新记录
0.2.1(2026-09-03) 下载此版本
清理白盒目录,内容不完全
0.2.0(2026-09-03) 下载此版本
代码开源,插件保证了基础的WEBGL对齐函数,用法类似WEBGL,使用的C++编译SO的写法,目前只支持GLES20,EGL14和WEBGL222个标准接口,需要用户自行研究(期待各位的优化结果)
平台兼容性
uni-app x(5.21)
| Chrome | Safari | Android | Android插件版本 | iOS | 鸿蒙 | 鸿蒙插件版本 | 微信小程序 | 微信小程序插件版本 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | 0.2.0 | × | 5.0 | 0.2.0 | √ | 0.2.0 |
gl-test-canvas —— 跨端 GL 画布(uni-app x / UTS)
统一 GL 画布框架:一套方法面(WebGL1 语义 222)走三端(Web / Android / Harmony), 底层各端 context 自管与 C 侧交互流线(浏览器 gl / V8 直调 / NAPI 平铺)。
源码仓库(公开可下载):https://gitee.com/A22L22/uniappx-gl-canvas
许可与合规
- 源码为原创实现;采用 MIT License 开源授权(宽松,可商用/修改)。
- 原生
libgl_test_native.so(utssdk/app-android/libs/arm64-v8a/)为组件自建,可随组件重新编译。 - 文档所述 "注入
.so到自定义基座(android_base.apk)" 属开发侧本地操作,不随插件分发或修改 DCloud 基座;其使用请遵循 DCloud 平台文档与规则。 - 提及的 uni-app x / HBuilderX / DCloud 为平台名称,仅作兼容性说明;本组件非 DCloud 官方出品。
能力边界(v0.1)
- 方法面:WebGL1 语义 222(GLRenderingContext——134 WebGL1 + 88 WebGL2 签名面)
- 绘制:drawRect/drawImage/drawVertices/变换组/save-restore/攒批 flush((texId, blend) 分段)+ 纹理通道(像素/真图 src)
- 平台:Web(浏览器 gl)/ Android(V8 直通 libGLESv2)/ HarmonyOS(NAPI 平铺)——EGL/GLES 直调逃生 + 专属扩展(FBO 双模式 Android)
- 边界:GLES 直通面覆盖 ES2 核心(GLES3-only 能力经 WebGL2 签名面/扩展);SurfaceView 直渲(TextureView 合成壳未提供);图像源 = 本地路径/像素(网络源需业务侧先取字节)
- 定位:作为跨端 GL 绘制的基础地基——一个绘制 view 经统一方法面被调用(页面/组件层零平台分支认知)
架构分层(2026-09 定案)
L1 组件 gl-test-canvas.uvue defineExpose 薄方法(26)→ GlCanvasMethod 转发
L2 GlCanvasMethod + GLRenderingContext 接口 方法面唯一契约(222 WebGL1 语义)
L3 context 实现 GLWebGLRenderingContext(浏览器 gl)
GLJNIRenderingContext(V8 直调 + .EGL/.GLES/FBO 专属)
GLNPIrenderingcontext(NAPI 平铺 + .EGL/.GLES)
L4 平台桥 app-android|harmony index.uts → render(view/XComponent 壳)
L5 V8/NAPI 回调 gl_webgl_v8.cpp / gl_canvas_harmony.cpp(NapiWebGL)
L6 C WebGLCore 222 分发 / GLES 原子 461 / EGL14 / gl_egl_surface
- 绘制:命令即 swap(clear/flush 原子内上屏);攒批 drawImage → flush 按 (texId, blend) 分段
- 恢复:切后台回前台 surface 重建只丢上屏像素——重画即恢复(信息在 context)
- 深测/自检见下
使用(方法面)
<gl-test-canvas ref="c" :width="360" :height="300" :frame-rate="60" />
const h = c.value
h!.$callMethod('clear', 0.1, 0.5, 0.9, 1) // 清屏(自带 swap)
h!.$callMethod('drawRect', 30, 40, 200, 160, 1, 0.2, 0.2, 1)
h!.$callMethod('flush') // 统一上屏
// context 直调(222 方法面 + 平台专属)
const ctx = h!.$callMethod('getGLContext')
ctx.clearColor(0, 0, 0, 1); ctx.clear(0x4000)
暴露方法(defineExpose 26):resize/clear/drawRect/setTransform/resetTransform/translate/scale/ rotate/save/restore/flush/drawVertices/toNdc/getCanvasSize/drawImageFromPixels/drawImageTex/ getOrCreateTexId/drawImageSrc/preloadImageSrc/getOrCreateSrcTexId/setBlend/getBlend/setFboMode/ selfCheck/getGLContext/destroy
(FBO 双模式 = GLJNI 专属;Web/Harmony 无此面自动空)
插件集成
- 复制组件包:
uni_modules/gl-test-canvas/整体拷入目标项目uni_modules/(easycom 自动注册) - 运行:HBuilderX 运行到各端——
- Web:直接跑(浏览器 gl)
- Android:so 随
libs/arm64-v8a/libgl_test_native.so——标准基座未含时用scripts/patch-android-base.sh(植入+重签,见docs/SO-BUILD-PACKAGING.md全流程) - Harmony:C 源码在
utssdk/app-harmony/src/main/cpp——HBuilderX 鸿蒙工程随源码编译(NAPI 桥)
- 自检:
h!.$callMethod('selfCheck')返回结构健康 JSON(context/drawingBuffer/glError); 深测(461 全量)ctx.runSelfTest(onLog)(R 按钮语义——三端 context 内置)
文档导航(docs/)
SO-BUILD-PACKAGING.md——C++ 编译/so 植入/基座更新全流程(改 C 后必读)HBuilder-PATCH-RISK.md——HBuilder patch 风险说明- 组件内 scripts/(4 个核心脚本):sync-native-core.sh(多副本同步)/patch-android-base.sh/ make-custom-base.sh/android-custom-base.sh(基座植入)
三端支持状态
| 能力 | Web | Android | Harmony |
|---|---|---|---|
| 222 方法面 | ✅ | ✅ | ✅ |
| 真图/纹理 | ✅ img→canvas | ✅ decode→texId | ✅ image kit→uploadTextureRGBA |
| EGL/GLES 专属 | — | ✅(.EGL/.GLES) | ✅(同 core getter) |
| FBO 双模式 | — | ✅ | 待继承(专属拓展) |
| 自检/461 | ✅ | ✅ | ✅ |

收藏人数:
https://gitee.com/A22L22/uniappx-gl-canvas
下载插件并导入HBuilderX
赞赏(0)
下载 2
赞赏 0
下载 12559264
赞赏 1948
赞赏
京公网安备:11010802035340号