是否可以在没有 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,这进一步表明它确实不需要屏幕。
其他可能感兴趣的示例:
- https://github.com/SaschaWillems/Vulkan/blob/b9f0ac91d2adccc3055a904d3a8f6553b10ff6cd/examples/screenshot/screenshot.cpp 启动一个 GUI,你可以点击一个按钮截屏,并保存到 `screenshot
- https://github.com/SaschaWillems/Vulkan/blob/b9f0ac91d2adccc3055a904d3a8f6553b10ff6cd/examples/offscreen/offscreen.cpp 渲染图像两次以创建反射效果
相关:How to use GLUT/OpenGL to render to a file?
在 Ubuntu 20.04、NVIDIA 驱动程序 435.21、NVIDIA Quadro M1200 GPU 上测试。
类似于 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,这进一步表明它确实不需要屏幕。
其他可能感兴趣的示例:
- https://github.com/SaschaWillems/Vulkan/blob/b9f0ac91d2adccc3055a904d3a8f6553b10ff6cd/examples/screenshot/screenshot.cpp 启动一个 GUI,你可以点击一个按钮截屏,并保存到 `screenshot
- https://github.com/SaschaWillems/Vulkan/blob/b9f0ac91d2adccc3055a904d3a8f6553b10ff6cd/examples/offscreen/offscreen.cpp 渲染图像两次以创建反射效果
相关:How to use GLUT/OpenGL to render to a file?
在 Ubuntu 20.04、NVIDIA 驱动程序 435.21、NVIDIA Quadro M1200 GPU 上测试。