更新记录

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.soutssdk/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 无此面自动空)

插件集成

  1. 复制组件包uni_modules/gl-test-canvas/ 整体拷入目标项目 uni_modules/(easycom 自动注册)
  2. 运行: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 桥)
  3. 自检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

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT License

Copyright (c) 2026 gl-test-canvas contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

暂无用户评论。