imgui

Moonbit binding for Dear ImGui library - A simple GUI example

imgui
gui
ffi
moonbit
moon add wzzc-dev/imgui@0.1.0
Download zip
Author
Version
0.1.0
License
Apache-2.0
Last updated
7 months ago
Downloads
20
README

#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.hlib/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
  • 查看项目文档