abhijit jagdale
abhijit jagdale

Reputation: 649

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

Similar to surfaceless context in OpenGL can we do it in Vulkan.

Upvotes: 9

Views: 6102

Answers (2)

SaschaWillems/Vulkan renderheadless.cpp example

It seems that Vulkan is designed to support offscreen rendering better than OpenGL.

This is mentioned on this NVIDIA overview: https://developer.nvidia.com/transitioning-opengl-vulkan

This is a runnable example that I just managed to run locally: https://github.com/SaschaWillems/Vulkan/tree/b9f0ac91d2adccc3055a904d3a8f6553b10ff6cd/examples/renderheadless/renderheadless.cpp

After installing the drivers and ensuring that the GPU is working I can do:

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

and this immediately generates an image headless.ppm without opening any windows:

enter image description here

I have also managed to run this program an Ubuntu Ctrl + Alt + F3 non-graphical TTY, which further indicates it really does not need a screen.

Other examples that might be of interest:

Related: How to use GLUT/OpenGL to render to a file?

Tested on Ubuntu 20.04, NVIDIA driver 435.21, NVIDIA Quadro M1200 GPU.

Upvotes: 3

ratchet freak
ratchet freak

Reputation: 48196

Sure it's even designed to do so from the start.

Instead of getting your images from a swapchain, create them and allocate and bind memory for it yourself.

Getting the result back will then require a copy into a host-visible readback buffer after the render.

Upvotes: 13

Related Questions