Skip to content

Repository files navigation

BN-RUST — BetterNemo Desktop with Rust WASM Renderer

基于 Tauri + Rust WASM 的编程猫扩展框架桌面版,通过 Rust 替换 JavaScript 渲染层实现性能提升。


项目简介

BetterNemo 是一个编程猫(Codemao)扩展框架的桌面客户端。本项目在原版基础上引入 Rust WASM 渲染器,使用 wgpu 实现 GPU 加速的精灵渲染,同时保持与原版 PIXI.js 引擎的完整兼容。

核心特性

特性说明
Rust WASM 渲染器基于 wgpu 的 GPU 加速精灵渲染,支持 WebGPU/WebGL
双引擎切换可在 PIXI.js(Canvas)和 Rust(WebGPU)之间自由切换
独立舞台窗口舞台运行时独立于编辑器,不加载编辑器 UI
BCM 作品导入支持编程猫 BCM 格式和 BetterNemo .bn 格式导入
Rust 渲染器修复修复 bind group、绘制数量、缩放旋转顺序等核心 bug
UI 性能优化MutationObserver 断开、DocumentFragment 批量插入、rAF 防抖
背景本地化背景图片内置,裁剪填充,设置持久化

项目结构

BN-RUST/
├── src-tauri/ # Tauri 桌面端
│ ├── Cargo.toml
│ ├── src/main.rs
│ └── tauri.conf.json
├── rust-renderer/ # Rust WASM 渲染器
│ ├── Cargo.toml
│ └── src/
│ ├── lib.rs # WASM 导出接口
│ ├── renderer.rs # wgpu 渲染核心
│ ├── data.rs # 数据结构定义
│ ├── texture.rs # 纹理管理
│ └── shader.wgsl # 顶点/片段着色器
├── public/
│ ├── bn/ # 前端公共资源
│ │ ├── workspace.html # 编辑器主页面
│ │ ├── stage.html # 舞台窗口(独立初始化)
│ │ ├── bs.js # dsbridge 桥接模拟
│ │ ├── extension-loader.js # 初始化加载器
│ │ ├── modify.css # 编辑器样式覆盖
│ │ ├── settings.css # UI 样式
│ │ ├── workspace-scripts/ # 工作区脚本
│ │ │ ├── utils.js # 工具函数 + BCM 导入
│ │ │ ├── menu.js # 顶栏菜单
│ │ │ ├── settings.js # 设置对话框
│ │ │ ├── blocks.js # 自定义积木
│ │ │ ├── domain-functions.js # 解释器
│ │ │ └── bn-format.js # .bn 格式处理
│ │ ├── render-bridge/ # 渲染桥接层
│ │ │ ├── index.js # 桥接入口
│ │ │ ├── pixi-proxy.js # PIXI 代理
│ │ │ ├── data-serializer.js
│ │ │ ├── texture-manager.js
│ │ │ └── pixi-scanner.js
│ │ ├── res/ # 资源(背景图等)
│ │ ├── extensions/ # 内置扩展
│ │ └── theme/ # 主题文件
│ └── wasm/ # WASM 编译产物
│ ├── bn_renderer.js
│ ├── bn_renderer_bg.wasm
│ └── bn_renderer.d.ts
├── src/ # TypeScript 源码
├── index.html
├── vite.config.ts
├── package.json
└── RUST_RENDERER_IMPLEMENTATION.md

快速开始

环境要求

安装依赖

npm install

编译 WASM 渲染器

npm run build:wasm

开发模式

npm run dev

构建发行版

npm run build

Rust WASM 渲染器

架构

@crc/stage → PIXI Proxy → 数据序列化 → Rust WASM → WebGPU → Canvas
↓ ↑
脏数据收集 SharedArrayBuffer

API

函数说明参数
init_renderer(canvas)初始化渲染器HTMLCanvasElement
update_sprites(json)更新精灵数据JSON 字符串
render_frame()渲染一帧
upload_texture(id, w, h, pixels)上传纹理ID, 宽, 高, RGBA 像素
remove_texture(id)删除纹理ID
clear_textures()清空纹理
resize(w, h)调整画布大小宽, 高

引擎切换

通过编辑器 "运行时" 菜单切换引擎:

  • PIXI.js (Canvas) — 默认引擎,兼容性最佳
  • Rust (WebGPU) — GPU 加速渲染,性能更优

切换后设置自动持久化到 localStorage。


舞台窗口

舞台窗口独立于编辑器运行:

  1. 通过 workspace.html 顶栏 "运行" → "启动运行" 或按 F5 打开
  2. 舞台窗口使用独立初始化,不加载编辑器 UI
  3. 自动运行当前作品

BCM 作品导入

支持两种格式:

格式扩展名说明
BCM.bcm编程猫原生格式(JSON),自动转换为运行时格式
BN.bnBetterNemo 格式(ZIP 容器)

导入路径:

  • 菜单 "更多" → "导入作品"
  • 拖拽文件到编辑器

UI 性能优化

优化项技术效果
MutationObserver找到 injectionDiv 后立即 disconnect()避免持续监听整个 DOM 子树
菜单渲染DocumentFragment 批量插入N 次重排降为 1 次
积木变化监听requestAnimationFrame 防抖同帧多次事件只执行一次
积木盒切换CSS transition 平滑过渡视觉反馈更流畅

已知问题

  • BCM 导入:编程猫原生 BCM 格式需要格式转换,部分复杂作品可能有兼容性问题
  • Rust WASM 渲染器:WebGPU 不可用时自动降级到 WebGL
  • dsbridge 桌面端模拟:部分原生 API 在桌面端不可用

相关链接


License

MIT

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages