【ZeloEngine】OpenGL升级Vulkan

【ZeloEngine】OpenGL升级Vulkan

请添加图片描述

Vulkan的资料有很多,这里以GDC2016中nvidia的slide作为讨论的基础

Vulkan: the essentials

Vulkan - 高性能渲染 - 知乎 // 结果发现是文刀秋二做的talk,这就是大佬把

还有一本基础书《Learning Vulkan》

这本书和大部分Packt的书一样有一个问题,有很多流水账一样的线性流程代码

在这里插入图片描述

下文中Vulkan简称vk

Scope

最终目标:多线程渲染框架

笔者水平有限,无法一步完成多线程渲染框架,拆解一下,大致分几步:

  1. GL升级Vulkan,跑通原来的Demo
  2. 多线程调研:Asio/TaskFlow
  3. 多线程引擎架构

是什么?不是什么?

vk是图形接口,笔者学习vk主要是理解CPU和GPU协同完成绘制的软件过程

vk不是GPU硬件,也不是图形学,但是有一定辅助理解作用

vk在渲染架构的位置

理想的分层架构如下,实际上由于缺乏经验,笔者无法很好地分离出RHI层,vk call到处飞

在这里插入图片描述

Why not DX12?

换开发框架,数学库,坐标系手性,shader,总之风险比Vulkan大

1. 初始化时序依赖

这里出现新的case了,下面两句不依赖window,尽早初始化

volk就是loader,调了才能调vk call,否则代码段错误

volk < create-window < vk-call

此外,还有一个依赖,所有显卡操作需要走命令队列,因此要先创建命令队列:

command pool < command buffer < vk-command-call

glslang_initialize_process();
volkInitialize();

2. 多图形接口宏管理

GL,Vulkan,两个宏,用ifdef到处打洞,打补丁,window这种强平台相关其实还不如每个写一个版本

一种比较干净的写法就是派生WindowGL,WindowVulkan类,顶层包一下宏,避免ifdef到处飞

由于SDL的Vulkan扩展总共就5个接口,这里就不派生了,统一放在一个Window类

3. SDL

市面上大部分例程都是glfw的,但是Zelo用的是SDL

SDL封装了窗口 / 平台相关的API,折腾了一会

// 1. native way
// Creat empty Window
CreateWindowEx(...);		/*Windows*/

// Query WSI extensions,store as function pointers. For example:
// vkCreateSwapchainKHR, vkCreateSwapchainKHR .....

// Create abstract surface object
VkWin32SurfaceCreateInfoKHR createInfo = {
   };
vkCreateWin32SurfaceKHR(instance, &createInfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值