是否可以在没有 Surface 的情况下在 Vulkan 中进行离屏渲染?

Is it possible to do offscreen rendering without Surface in Vulkan?

类似于 OpenGL 中的无表面上下文,我们可以在 Vulkan 中实现吗?

当然,它甚至从一开始就设计为这样做。

与其从交换链获取图像,不如自己创建它们并为其分配和绑定内存。

返回结果需要在渲染后复制到主机可见的回读缓冲区。

SaschaWillems/Vulkan renderheadless.cpp 例子

Vulkan 似乎比 OpenGL 更支持离屏渲染。

NVIDIA 概述中提到了这一点:https://developer.nvidia.com/transitioning-opengl-vulkan

这是一个 运行 可行的示例,我刚刚在本地 运行:https://github.com/SaschaWillems/Vulkan/tree/b9f0ac91d2adccc3055a904d3a8f6553b10ff6cd/examples/renderheadless/renderheadless.cpp

安装驱动程序后 ensuring that the GPU is working 我可以:

git clone https://github.com/SaschaWillems/Vulkan
cd Vulkan
git checkout b9f0ac91d2adccc3055a904d3a8f6553b10ff6cd
python download_assets.py
mkdir build
cd build
cmake ..
make -j`nproc`
cd bin
./renderheadless

这会立即生成图像 headless.ppm 而无需打开任何 windows:

我还设法 运行 这个程序 Ubuntu Ctrl + Alt + F3 non-graphical TTY,这进一步表明它确实不需要屏幕。

其他可能感兴趣的示例:

相关:How to use GLUT/OpenGL to render to a file?

在 Ubuntu 20.04、NVIDIA 驱动程序 435.21、NVIDIA Quadro M1200 GPU 上测试。