SuperAPI AI 工具集

bindings-synchronization

编程与开发

查看项目

更新于 10-15 21:54

技能介绍

用途:这是 Filament 项目的跨平台语言绑定同步规范(SOP),用于在修改公开 C++ API 时,确保 Java(Android JNI)与 JavaScript/TypeScript(Web/WASM)绑定层同步更新。

触发条件:改动 filament/include/filament/ 下公开头文件时需检查绑定,包括核心类(如 View、Engine、Camera、LightManager、RenderableManager)的新增/修改/删除方法、Options 结构体(如 AmbientOcclusionOptions、BloomOptions、FogOptions)、枚举与常量(如 BlendMode、QualityLevel、AntiAliasing)。

Options 结构体改动:需运行 apigen 重新生成 View.java 与 View.cpp:python3 tools/apigen/generate_android.py -j;并运行 beamsplitter 更新 JS/TS 绑定与 C++ JSON 设置序列化:cd tools/beamsplitter && go run .

Java 与 Android JNI:JNI 导出函数使用自动符号解析(按签名映射)。Java 类位于 android/filament-android/src/main/java/com/google/android/filament/<ClassName>.java,JNI C++ 包装位于 android/filament-android/src/main/cpp/<ClassName>.cpp。要求保持 API 一致、方法可见性为 public(除非严格内部)、遵循 camelCase;新增 Setter 时须补对应 Getter;Java 原生声明须为 private static native,C++ 函数须用 extern "C" JNIEXPORT <ReturnType> JNICALL Java_com_google_android_filament_<ClassName>_<NativeMethodName>;C++ bool 返回值须用 (jboolean) 或 static_cast<jboolean>() 转换。

JavaScript 与 TypeScript:使用 Emscripten Embind 导出。Embind 源为 web/filament-js/jsbindings.cpp,枚举源为 web/filament-js/jsenums.cpp,TS 定义为 web/filament-js/filament.d.ts,JS 扩展包装为 web/filament-js/extensions.js。需在对应 class_<ClassName>("<JSClassName>") 块中用 .function("methodName", &ClassName::methodName) 注册成员函数;同步更新 filament.d.ts 中 export class <ClassName> 的声明;Options 结构体新字段需用 .field("fieldName", &ClassName::Options::fieldName) 注册并更新 TS 接口,同时检查 extensions.js 中合并选项的原型覆盖包装(如 Filament.View.prototype.setBloomOptions)并按需更新默认选项对象。

验证:结束任务前核对 JNI 签名与 Java 类一致、类型绑定与返回类型匹配、filament.d.ts 定义完全同步。

限制:资料未提供具体版本要求、依赖安装步骤、测试命令及错误处理细节。