一分钟学 Vulkan 之 Image & Buffer

一分钟学 Vulkan 之 Image & Buffer

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

Vulkan SDK 里有我的代码。

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

一分钟学 Vulkan 之 Image & Buffer

上回我们提到 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 里就只包含这个六张图片。

一分钟学 Vulkan 之 Image & Buffer

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

Buffer

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

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

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

———————————

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

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容