Sign in

    imgui

    Moonbit binding for Dear ImGui library - A simple GUI example

    imgui
    gui
    ffi
    moonbit
    Download zip
    Author
    Version
    0.1.0
    License
    Apache-2.0
    Last updated
    9 months ago
    Downloads
    35

    No dependencies

    #imgui-mbt

    Moonbit binding for Dear ImGui library - 一个使用 WebGPU 和 SDL3 的跨平台 GUI 示例

    #项目概述

    imgui-mbt 是一个为 Moonbit 编程语言提供的 Dear ImGui 绑定库,支持现代图形 API WebGPU 和最新的 SDL3 窗口管理。项目展示了如何将 C/C++ 图形库与 Moonbit 进行高效集成。

    #技术栈

    • Moonbit: 现代化的系统编程语言
    • Dear ImGui: 轻量级即时模式 GUI 库
    • WebGPU: 下一代图形 API(替代 OpenGL)
    • SDL3: 跨平台窗口和输入管理库
    • CMake + Ninja: 现代构建系统
    • MinGW-w64: Windows 平台的 GCC 工具链

    #功能特性

    • 🚀 基于 WebGPU 的现代图形渲染
    • 🖼️ SDL3 窗口管理和事件处理
    • 📱 跨平台支持(Windows/Linux/macOS)
    • 🔧 静态库构建,便于 Moonbit FFI 集成
    • 📐 完整的 Dear ImGui 控件支持
    • 🎯 优化的构建流程和依赖管理

    #项目结构

    imgui-mbt/ ├── CMakeLists.txt # CMake 构建配置 ├── build.ps1 # Windows PowerShell 构建脚本 ├── build.sh # Linux/macOS shell 构建脚本 ├── moon.mod.json # Moonbit 模块配置 ├── src/ │ ├── lib/ │ │ ├── hello.mbt # Moonbit GUI 库接口 │ │ ├── hello_test.mbt # 测试文件 │ │ ├── moon.pkg.json # 包配置 │ │ ├── imgui_bindings.cpp # C++ FFI 绑定实现 │ │ └── imgui_bindings.h # C FFI 头文件 │ └── main/ │ ├── main.mbt # 主程序入口 │ └── moon.pkg.json # 主程序包配置 ├── external/ # 外部依赖库 │ ├── imgui/ # Dear ImGui 源码 │ ├── SDL3-3.4.0/ # SDL3 开发库 │ └── wgpu-windows-x86_64-gnu-release/ # WebGPU 实现 ├── build/ # 构建输出目录 ├── target/ # 运行时文件目录 └── LICENSE # Apache 2.0 许可证

    #快速开始

    #前置要求

    • CMake 3.22 或更高版本
    • Ninja 构建系统
    • GCC/MinGW-w64 编译器(Windows)
    • Moonbit 工具链

    #Windows 构建

    1. 下载依赖库:

    2. 自动构建:
      .\build.ps1

    3. 手动构建(可选):
      # 配置项目 cmake -B build -G "Ninja" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ # 构建 cmake --build build

    #Linux/macOS 构建

    # 安装依赖 sudo apt-get install libsdl3-dev # Ubuntu/Debian # 或使用 brew install sdl3 # macOS # 构建 ./build.sh

    #Moonbit 编译和运行

    # 编译项目 moon build --target native # 运行示例 moon run

    #API 使用示例

    #基本 GUI 应用

    import lib { imgui_init, imgui_shutdown, main_loop, cleanup }

    fn main {
    // 初始化 ImGui
    let init_result = imgui_init()
    if init_result {
    println("Dear ImGui initialized successfully!")
    } else {
    println("Failed to initialize Dear ImGui")
    cleanup()
    return
    }

    // 运行主循环
    println("Starting main loop...")
    main_loop()

    // 清理资源
    cleanup()
    println("Program exited successfully")
    }

    #可用的 GUI 控件

    // 窗口管理
    imgui_begin("窗口标题")
    imgui_end()

    // 基本控件
    imgui_button("按钮")
    imgui_slider_float("滑动条", 50.0, 0.0, 100.0)
    imgui_checkbox("复选框", true)
    imgui_text("文本显示")

    // 布局
    imgui_separator()
    imgui_same_line()

    #构建说明

    #依赖库版本

    • Dear Imgui: 最新主分支(通过 git 自动克隆)
    • SDL3: 3.4.0(MinGW-w64 版本)
    • WebGPU: 最新 wgpu-native 发布版

    #构建输出

    构建过程生成以下文件:

    • build/libimgui.a - 静态链接库(Moonbit FFI 使用)
    • target/SDL3.dll - SDL3 运行时库
    • target/wgpu_native.dll - WebGPU 运行时库

    #平台特定说明

    Windows:
    • 使用 MinGW-w64 GCC 编译器
    • 自动处理 DLL 依赖关系
    • 支持 Visual Studio 替代构建

    Linux:
    • 使用系统包管理器安装 SDL3
    • 可能需要手动安装 WebGPU 依赖

    macOS:
    • 通过 Homebrew 安装 SDL3
    • Metal 后端 WebGPU 支持

    #故障排除

    #常见问题

    1. SDL3 未找到:
      • 检查 external/SDL3-3.4.0/x86_64-w64-mingw32/ 目录结构
      • 确保包含 include/SDL3/SDL.h 和 lib/cmake/SDL3/SDL3Config.cmake

    2. WebGPU 构建错误:
      • 验证 external/wgpu-windows-x86-64-gnu-release/ 目录
      • 检查 include/webgpu/webgpu.h 文件是否存在

    3. Moonbit 导入错误:
      • 确保 moon.mod.json 配置正确
      • 检查包导入路径 @lib.function_name

    #调试信息

    构建脚本提供详细的验证步骤:

    • SDL3 头文件和库验证
    • WebGPU 依赖检查
    • 构建过程状态跟踪
    • 运行时文件自动复制

    #贡献指南

    欢迎提交 Issue 和 Pull Request!

    #开发流程

    1. Fork 本项目
    2. 创建功能分支 (git checkout -b feature/AmazingFeature)
    3. 提交更改 (git commit -m 'Add some AmazingFeature')
    4. 推送到分支 (git push origin feature/AmazingFeature)
    5. 创建 Pull Request

    #代码规范

    • 遵循现有的代码风格
    • 添加适当的注释和文档
    • 确保跨平台兼容性
    • 更新相关的测试用例

    #许可证

    本项目采用 Apache 2.0 许可证 - 查看 LICENSE 文件了解详情。

    #致谢

    • Dear ImGui - 优秀的即时模式 GUI 库
    • SDL - 跨平台多媒体库
    • WebGPU - 下一代图形 API
    • Moonbit - 现代化的编程语言

    #联系方式

    如有问题或建议,请通过以下方式联系:

    • 提交 GitHub Issue
    • 查看项目文档