版本:v0.0.1
所属项目:Bit HCI
定位:BitUI 框架的原生运行容器和测试窗口
Native 模块是 Bit HCI 项目的原生测试窗口和运行容器,用于:
- 提供跨平台窗口系统抽象(当前支持 Win32)
- 实现 Vulkan 渲染管线
- 作为 BitUI 框架的运行时验证环境
- 测试和优化渲染性能
| 技术 | 版本 | 用途 |
|---|---|---|
| C++ | C++20 | 核心实现语言 |
| Vulkan | 1.3 | 图形渲染 API |
| Win32 API | - | Windows 平台窗口管理 |
| CMake | 3.24+ | 构建系统 |
// src/platform/win32_window.h/cpp
✅ 窗口创建与管理
✅ 消息循环处理
✅ 窗口事件响应(关闭、调整大小)
✅ 基础窗口属性(800x600 默认尺寸)特点:
- 简洁的 Win32 封装
- 无第三方依赖
- 支持 Unicode(wmain)
// src/vk/instance.h/cpp
✅ Vulkan 实例创建
✅ Win32 表面创建
✅ 物理设备选择
✅ 逻辑设备创建
✅ 队列族查询(图形 + 呈现)实现细节:
- API 版本:Vulkan 1.3
- 启用扩展:VK_KHR_surface, VK_KHR_win32_surface, VK_KHR_swapchain
- Debug 模式下启用验证层:VK_LAYER_KHRONOS_validation
✅ 交换链创建和配置
✅ 格式选择(优先 B8G8R8A8_UNORM + SRGB_NONLINEAR)
✅ 呈现模式(优先 MAILBOX,回退 FIFO)
✅ 图像尺寸管理
✅ 多图像缓冲(minImageCount + 1)
✅ 交换链重建(窗口调整大小)✅ 图像视图(Image Views)
✅ 渲染通道(Render Pass)
- 单个颜色附件
- LOAD_OP_CLEAR + STORE_OP_STORE
- 正确的子通道依赖
✅ 帧缓冲(Framebuffers)
✅ 命令池和命令缓冲
✅ 命令缓冲录制(基础清屏)✅ 双缓冲帧同步
✅ 信号量(图像可用、渲染完成)
✅ 栅栏(飞行帧管理)
✅ 正确的同步原语使用✅ 基础渲染循环
✅ 图像获取(vkAcquireNextImageKHR)
✅ 命令提交(vkQueueSubmit)
✅ 图像呈现(vkQueuePresentKHR)
✅ 清屏颜色:深蓝色 (0.02, 0.02, 0.05, 1.0)
✅ 错误处理(OUT_OF_DATE、SUBOPTIMAL)native/
├── CMakeLists.txt # 构建配置
├── README.md # 本文档
│
├── src/
│ ├── main.cpp # 主入口
│ │ └── [130 行] 初始化和主循环
│ │
│ ├── platform/ # 平台层
│ │ ├── win32_window.h # Win32 窗口接口
│ │ └── win32_window.cpp # Win32 窗口实现 [30 行]
│ │
│ └── vk/ # Vulkan 层
│ ├── instance.h # Vulkan 应用接口
│ └── instance.cpp # Vulkan 应用实现 [346 行]
│
└── build/
├── bitui_native.exe # 可执行文件
└── [构建产物]
| 模块 | 文件数 | 代码行数 | 状态 |
|---|---|---|---|
| 主程序 | 1 | ~32 行 | ✅ 完成 |
| 平台层 | 2 | ~42 行 | ✅ 完成 |
| Vulkan 层 | 2 | ~390 行 | ✅ 完成 |
| 总计 | 5 | ~464 行 | 80% 完成 |
# 必需
- CMake 3.24+
- Vulkan SDK 1.3+
- Visual Studio 2019+ (Windows)
- 或 MinGW-w64 (Windows)# 1. 进入 native 目录
cd native
# 2. 创建构建目录
mkdir build
cd build
# 3. 配置 CMake
cmake .. -G "MinGW Makefiles" # MinGW
# 或
cmake .. -G "Visual Studio 17 2022" # VS 2022
# 4. 构建
cmake --build . --config Release
# 5. 运行
./bitui_native.exe当前效果:
- ✅ 打开 800x600 的窗口
- ✅ 窗口标题:"BitUI Vulkan (No 3rd-Party)"
- ✅ 清屏为深蓝色(接近黑色)
- ✅ 流畅的 60+ FPS
- ✅ 支持窗口调整大小(自动重建交换链)
- ✅ 正常的窗口关闭
目标:渲染第一个三角形
任务清单:
- 着色器模块
- 顶点着色器(GLSL → SPIR-V)
- 片段着色器(GLSL → SPIR-V)
- 着色器加载和编译
- 图形管线状态
- 顶点输入状态
- 输入装配状态(三角形列表)
- 视口和裁剪状态
- 光栅化状态
- 多重采样状态
- 深度/模板状态
- 颜色混合状态
- 动态状态
- 管线布局
- 图形管线创建
预期效果:
窗口中央显示一个彩色三角形
- 顶点颜色插值
- 流畅旋转动画(可选)
任务清单:
- 顶点缓冲创建
- Staging Buffer(暂存缓冲)
- Device Local Buffer(设备本地缓冲)
- 内存分配和绑定
- 数据上传
- CPU → GPU 数据传输
- 命令缓冲录制
- 传输队列使用
- 索引缓冲(可选)
任务清单:
- 键盘输入处理
- 按键事件捕获
- 按键状态管理
- 输入回调系统
- 鼠标输入处理
- 鼠标移动事件
- 鼠标按钮事件
- 鼠标滚轮事件
- 输入到渲染的桥接
任务清单:
- 缓冲管理器
- 缓冲池
- 自动内存管理
- 缓冲复用
- 纹理管理器
- 图像加载(STB Image)
- Mipmaps 生成
- 采样器创建
- 着色器管理器
- 着色器编译缓存
- 热重载支持
任务清单:
- 字体加载(FreeType 或 STB TrueType)
- 字形纹理生成
- 文本布局引擎
- UI 文本渲染
┌─────────────────────────────────────┐
│ 应用层(BitUI Runtime) │
├─────────────────────────────────────┤
│ 渲染抽象层(Renderer API) │
├─────────────────────────────────────┤
│ 资源管理层(Resource Manager) │
├─────────────────────────────────────┤
│ Vulkan 封装层(VkApp)← 当前位置 │
├─────────────────────────────────────┤
│ 平台层(Win32Window 等) │
├─────────────────────────────────────┤
│ 操作系统(Win32 / Linux) │
└─────────────────────────────────────┘
-
零第三方依赖(基础层)
- 不依赖 GLFW/SDL
- 直接使用 Win32 API
- 仅依赖 Vulkan SDK
-
显式控制
- 手动资源管理
- 显式同步
- 无隐藏开销
-
模块化设计
- 平台层抽象
- Vulkan 封装独立
- 易于扩展新平台
-
性能优先
- 最小化 CPU 开销
- 优化 GPU 提交
- 高效的同步机制
// 当前的资源生命周期
创建阶段:
1. Vulkan Instance
2. Surface(平台相关)
3. Physical Device 选择
4. Logical Device
5. Swapchain
6. Render Pass
7. Framebuffers
8. Command Buffers
9. Sync Objects
运行阶段:
- 等待栅栏
- 获取图像
- 提交命令
- 呈现图像
- 帧循环
销毁阶段:
- 等待设备空闲
- 反向销毁所有资源
- 正确的销毁顺序// 双缓冲策略
Frame 0: {
imageAvailable[0] // 信号量:图像可用
renderFinished[0] // 信号量:渲染完成
inFlight[0] // 栅栏:帧飞行中
}
Frame 1: {
imageAvailable[1]
renderFinished[1]
inFlight[1]
}
// 循环:currentFrame = (currentFrame + 1) & 1触发条件:
1. VK_ERROR_OUT_OF_DATE_KHR(窗口调整大小)
2. VK_SUBOPTIMAL_KHR(次优配置)
3. 窗口最小化/恢复
重建流程:
1. vkDeviceWaitIdle()
2. 销毁旧资源
3. 重新创建交换链
4. 重新创建渲染资源
5. 重新录制命令缓冲-
平台支持
- ✅ Windows(Win32)
- ❌ Linux(计划中)
- ❌ macOS(需要 MoltenVK)
-
功能限制
- ✅ 基础清屏
- ❌ 图形绘制
- ❌ 文本渲染
- ❌ 输入处理
-
性能优化
⚠️ 单线程渲染⚠️ 无命令缓冲复用⚠️ 无资源池化
[ ] 窗口最小化时的渲染暂停
[ ] 高 DPI 显示器支持
[ ] 多显示器支持
[ ] 全屏模式切换
[ ] V-Sync 配置选项
-
Vulkan 基础
-
高级技术
-
最佳实践
- 熟悉现有代码结构
- 选择任务(参考"下一步计划")
- 创建功能分支
- 实现并测试
- 提交 Pull Request
- 使用 C++20 标准
- RAII 资源管理
- 明确的错误处理
- 详细的注释
维护者:Bit Project 团队
最后更新:2025-10-11
模块版本:v0.0.1
状态:🔄 活跃开发中