# vulkanApp **Repository Path**: zhangyudada/vulkan-app ## Basic Information - **Project Name**: vulkanApp - **Description**: vulkan 开发引擎项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-08 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android Vulkan 应用框架 这是一个完整的 Android Vulkan 应用框架,提供了从 Java/Kotlin 层到 Native C++ 层的完整集成。 ## 项目结构 ``` . ├── app/ │ ├── build.gradle # 应用构建配置 │ ├── src/ │ │ ├── main/ │ │ │ ├── cpp/ # C++ 原生代码 │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── main.cpp # JNI 入口 │ │ │ │ ├── VulkanRenderer.cpp/h # 渲染器主类 │ │ │ │ ├── VulkanInstance.cpp/h # Vulkan 实例管理 │ │ │ │ ├── VulkanDevice.cpp/h # 设备管理 │ │ │ │ ├── VulkanSwapchain.cpp/h # 交换链管理 │ │ │ │ └── VulkanUtils.cpp/h # 工具函数 │ │ │ ├── java/ │ │ │ │ └── com/vulkan/app/ │ │ │ │ ├── MainActivity.java # 主 Activity │ │ │ │ └── VulkanView.java # Vulkan Surface 视图 │ │ │ └── AndroidManifest.xml │ │ └── ... │ └── ... ├── build.gradle # 项目级构建配置 ├── settings.gradle └── README.md ``` ## 核心组件 ### 1. VulkanRenderer - 渲染器主类,管理整个渲染流程 - 处理 Surface 创建、销毁和大小变化 - 管理渲染循环和同步对象 ### 2. VulkanInstance - 创建和管理 Vulkan 实例 - 处理扩展和验证层 ### 3. VulkanDevice - 选择物理设备 - 创建逻辑设备 - 管理队列和命令池 ### 4. VulkanSwapchain - 创建和管理交换链 - 管理图像视图和帧缓冲 - 创建渲染通道 ### 5. JNI 桥接 - `main.cpp` 提供 Java 到 C++ 的接口 - 处理生命周期事件 ## 使用方法 ### 1. 环境要求 - Android Studio Arctic Fox 或更高版本 - Android NDK r21 或更高版本 - CMake 3.22.1 或更高版本 - 支持 Vulkan 的 Android 设备(Android 7.0+) ### 2. 构建项目 ```bash # 使用 Gradle ./gradlew assembleDebug # 或使用 Android Studio # Build -> Make Project ``` ### 3. 运行 - 连接支持 Vulkan 的 Android 设备 - 在 Android Studio 中点击 Run - 或使用 `adb install` 安装 APK ## 功能特性 ✅ Vulkan 实例初始化 ✅ 物理设备选择 ✅ 逻辑设备创建 ✅ Surface 创建和管理 ✅ 交换链创建和重建 ✅ 渲染通道和帧缓冲 ✅ 命令缓冲区管理 ✅ 同步对象(信号量、围栏) ✅ 基础渲染循环 ✅ Android 生命周期集成 ## 下一步开发 ### 添加渲染内容 在 `VulkanRenderer::render()` 方法中,`vkCmdBeginRenderPass` 和 `vkCmdEndRenderPass` 之间添加实际的渲染命令: 1. **创建图形管线**: - 编写顶点和片段着色器 - 创建管线布局 - 创建图形管线 2. **创建顶点缓冲区**: - 定义顶点数据 - 创建缓冲区 - 上传数据到 GPU 3. **绘制**: - 绑定管线 - 绑定顶点缓冲区 - 调用 `vkCmdDraw` ### 示例:绘制三角形 ```cpp // 在 render() 方法中 vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, m_graphicsPipeline); vkCmdDraw(commandBuffer, 3, 1, 0, 0); ``` ## 调试 ### 启用验证层 项目已配置验证层支持,在 Debug 模式下会自动启用。 ### 查看日志 ```bash adb logcat | grep -E "VulkanApp|VulkanRenderer|VulkanInstance|VulkanDevice|VulkanSwapchain" ``` ### 使用 RenderDoc 1. 在设备上安装 RenderDoc Android 版本 2. 启动应用 3. 在 RenderDoc 中捕获帧 ## 常见问题 ### 1. 找不到 Vulkan 库 确保设备支持 Vulkan,检查 `AndroidManifest.xml` 中的 Vulkan 特性声明。 ### 2. 编译错误 - 检查 NDK 版本 - 确保 CMake 版本正确 - 检查 Vulkan 头文件路径 ### 3. 运行时崩溃 - 检查日志输出 - 确保在支持 Vulkan 的设备上运行 - 检查 Surface 创建是否成功 ## 参考资料 - [Vulkan Tutorial](https://vulkan-tutorial.com/) - [Android NDK Documentation](https://developer.android.com/ndk) - [Khronos Vulkan Samples](https://github.com/KhronosGroup/Vulkan-Samples) ## 许可证 本项目仅供学习使用。