Ahao's Technical Blog Ahao's Technical Blog
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
  • 008.核心系统服务
  • 009.输入系统
  • 010.开发工具
  • Vulkan
  • OpenGL
  • Skia
  • 001.语法相关
  • 002.Android相关
  • 003.Linux相关
  • 004.环境配置
  • 001.Java
  • 002.Kotlin
  • 003.C/C++
  • 004.脚本类
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

阿豪讲Framework

不积跬步无以至千里
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
  • 008.核心系统服务
  • 009.输入系统
  • 010.开发工具
  • Vulkan
  • OpenGL
  • Skia
  • 001.语法相关
  • 002.Android相关
  • 003.Linux相关
  • 004.环境配置
  • 001.Java
  • 002.Kotlin
  • 003.C/C++
  • 004.脚本类
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Vulkan

    • 001.Vulkan 整体架构
    • 002.Vulkan绘制一个三角形1——概述
      • 003.Vulkan绘制一个三角形2——初始化过程分析1
      • 004.Vulkan绘制一个三角形3——初始化过程分析2
    • OpenGL

    • Skia

    • Graphic
    • Vulkan
    ahao
    2026-02-03
    目录

    002.Vulkan绘制一个三角形1——概述

    # Vulkan 绘制一个三角形1 —— 概述

    在 Android 平台绘制一个简单的三角形,对应代码如下:

    https://github.com/yuandaimaahao/VulkanDemos

    20260202203650

    # 第一阶段:初始化 (Initialization)

    这是最繁琐的阶段,通常只在程序启动时执行一次。目的是建立与 GPU 的连接并准备好绘图所需的"基础设施"。一般的流程如下:

    1. 创建 Instance (VkInstance),VkInstance 是应用程序与 Vulkan 库(Loader)之间的连接桥梁,可以把它理解为 Vulkan 的"上下文"或"入口点"
    2. 选择物理设备 (VkPhysicalDevice),查询系统中有几张显卡,选择最适合的一张(比如选独显而不是集显)。
    3. 创建逻辑设备 (VkDevice) 和队列 (VkQueue),建立与选定显卡的逻辑连接,并获取命令队列(Graphics Queue, Present Queue)。
    4. 创建窗口表面 (VkSurfaceKHR) 和交换链 (VkSwapchainKHR),连接操作系统窗口,创建一组用于显示的图像缓冲区(Images)。通常采用双缓冲或三缓冲模式。
    5. 创建图像视图 (VkImageView) 和帧缓冲 (VkFramebuffer),告诉 Vulkan 如何看待和使用交换链里的那些图像。

    # 第二阶段:管线准备 (Pipeline Setup)

    这个阶段定义了"怎么画"。

    1. 创建渲染流程 (VkRenderPass),描述渲染的整体流程。比如:图像的格式是什么?画之前要不要清屏(Clear)?画完后图像要存到哪里?
    2. 创建图形管线 (VkPipeline),这是最复杂的一步。你需要配置所有的固定功能状态(视口大小、光栅化、深度测试、混合模式)以及加载可编程着色器(Vertex/Fragment Shaders)。
    3. 创建命令池 (VkCommandPool) 和命令缓冲 (VkCommandBuffer),Vulkan 的绘图指令不是直接发给 GPU 的,而是先记录在 CommandBuffer 中,然后一次性提交。

    # 第三阶段:渲染循环 (Render Loop)

    这是程序运行时的核心循环,每一帧都在重复这个过程。

    1. 绘制一帧 (Draw Frame),这个过程通常包含三个同步步骤:
      • 获取图像 (vkAcquireNextImageKHR):从交换链中拿一张空闲的画布。
      • 提交命令 (vkQueueSubmit):把之前录好的 CommandBuffer(里面包含 vkCmdDraw)提交给 GPU 队列去执行。
      • 呈现图像 (vkQueuePresentKHR):等 GPU 画完了,把这张画送回交换链,显示在屏幕上。

    # 第四阶段:清理 (Cleanup)

    Vulkan 没有垃圾回收机制,你创建的每一个对象都必须手动销毁。销毁资源遵循“后创建先销毁”的栈式顺序。

    顺序:Pipeline -> RenderPass -> Swapchain -> Device -> Instance。

    # 总结

    Instance -> PhysicalDevice -> Device -> Swapchain -> RenderPass -> Pipeline -> (Loop: Acquire -> Submit -> Present) -> CleanUp

    001.Vulkan 整体架构
    003.Vulkan绘制一个三角形2——初始化过程分析1

    ← 001.Vulkan 整体架构 003.Vulkan绘制一个三角形2——初始化过程分析1→

    最近更新
    01
    004.Vulkan绘制一个三角形3——初始化过程分析2
    02-03
    02
    003.Vulkan绘制一个三角形2——初始化过程分析1
    02-03
    03
    窗口显示过程全流程分析1
    02-02
    更多文章>
    Theme by Vdoing | Copyright © 2020-2026 AHao Framework | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式