图形绘制流水线的基本原理与实践学习
Vulkan
传统与现代 RHI对比
传统——几乎所有的绘制命令都依赖隐式或者显式的Context调用 CPU等待GPU性能不对等 驱动层有更多的权重
现代——依赖程序自身的认知,需要开发人员关心同步和内存分配 多线程更友好 GPU计算的掌握权在开发者
驱动不干活要 写出高性能程序比较困难 熟练的可以使驱动层非常薄
学习曲线 传统->现代 openGL->D3D11->Vulkan
程序流水线
初始化->
调用os的API创建程序可以显示的窗口(可以是第三方库)
初始化Vulkan
程序与库取得联系
Vulkan和显卡设备取得联系
创建Swapchian
Vulkan和显示窗口取得联系
渲染主循环->
输入
几何信息
uniform
输出
屏幕中的画面
逻辑
着色器
更新CPU端的业务逻辑
数据CPU拷贝到GPU
生产Vulkan Command Buffrt 把显然任务交给GPU并在屏幕中下面睡觉哦
退出程序
释放Vulkan对象,以及CPU的数据
关闭程序窗口
初始化
首先 需要关心窗口类型是WIn32 XCB WALAND 后续创建Swapchain会需要这些信息,可以通过第三方库来获取
使用场景
程序->实例->物理设备->逻辑设备->队列
设计复杂的现实环境方便更多的物理设备能够更好的利用
创建Vulkan Instance 初始化Vulkan library
app-> loader->layerA->layerB
layer-类似于函数重载 提供一个可以重写函数的方式,可以重载对应的Vulkan函数,并传给下一层layer
VulkanExampleBase::createInstance()
vkCreateInstance
VkInstanceCreateInfo
VkApplicationInfo
获取Vulkan Instance和显卡的联系
VulkanExampleBase::initVulkan()
vkEnumeratePysicalDeices
所有的Command都系要上传到VkQueue
不同来源的队列簇Queue Family Properties只允许部分类型的Command
VulkanDevice::createLogicalDevice
VkDevicrQueueCreateInfo
vkGetPhysicalDeviceQueueFamilyProperties
物理设备有了,需要一个逻辑设备和Vulkan做交互
从逻辑设备中获取命令队列
VlkanDevice::createLogicalDevice
VkDeviceQueueCreayeInfo
VkDeviceCreayeInfo
vkCreateDevice
和窗口取得联系
叼茂SEO.bfbikes.com
叼茂SEO.bfbikes.com
想想你的文章写的特别好
怎么收藏这篇文章?
怎么收藏这篇文章?
看的我热血沸腾啊https://www.237fa.com/
哈哈哈,写的太好了https://www.cscnn.com/
你的文章让我感受到了正能量,非常棒!http://www.xufangxued.com.cn
你的文章让我学到了很多技能,非常实用。http://www.shmengpai.com
你的文章充满了创意,真是让人惊喜。http://www.szyagong.com