企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

一分钟学 Vulkan 之 Image & Buffer

wudianyun 2025-04-01 23:26:58 精选文章 14 ℃

最近忙着给 Vulkan 的官方代码修 bug,Vulkan 是一个互联网思维的奇葩,版本号每周都变,bug 到处都是。好处是你可以在 github 上 push 自己的代码,然后发一条帅气的朋友圈:

Vulkan SDK 里有我的代码。

回头看看这个专栏都长草了,舍不得大家,回来继续更新。I'm back!

上回我们提到 InstanceDevice,等于是拿到了显卡的微信号加了她为好友。总得聊些啥吧,这聊天的话题便是ImageBuffer

Image 就是让友谊的小船说翻就翻的图片,Buffer 就是马云的 100 句名言。

Image

额,说正经的,Image 类似 OpenGL 和 DirectX 中的 Texture,身为底层渲染 API,在创建 Image 时需要指定后头怎么使用它,比如说:

  • 可写的 color attachment,打算将渲染的结果画到这个 Image 中。

  • 可读的传统贴图,在 shader 中 配合 sampler 进行读取

  • 可读可写,image load/store

创建时指定用途的概念在 DX 中很常见,对 GL 对开发者比较陌生。

此外,还需要指定 image 在显存中的存放格式,LINEAR或者OPTIMAL。OPTIMAL 么就是让显存尽可能优化地管理 image,至于它怎么管理的,你完全猜不透。LINEAR 么就是按照连续的方式存放,这种方式对 GPU 不友好,对人类友好。

有些(大部分)image 的格式是不支持 LINEAR 的,用前记得查询。

这还没完,Image 是不能直接用的,配套的还有个 ImageView,DX 的程序员眼前一亮,不就是 SRV嘛。眼前没亮的朋友也不用担心,ImageView 的概念很简单,Image 里包含不只一张图片,而我们只对其中部分感兴趣,比如下图中的最底部的六张小图片,那创建的 ImageView 里就只包含这个六张图片。

ImageView 还可以伪装 Image 的格式,比如把 UNORM的 Image 伪装成UINT格式的,DX 程序眼前再次一亮。

Buffer

Buffer 简单多了,创建时只需要指定尺寸和用法。

使用时,也可以直接用,毕竟只是一坨内存嘛。

但是,如果你想在 shader 里把它当作 texel buffer,需要提供一个额外的 BufferView

---------------------------------

转载请保留作者名、注明源自微信公众号“黑客与画家”(HackerAndPainter),关注游戏开发、计算机视觉、图形学、虚拟现实、体感交互等好玩的内容。

最近发表
标签列表