04-19-2021 01:24 PM
Hi!
I'm porting an application from OpenGL to Vulkan and it's time for VR. Until now I've been obtaining swapchain images via OpenGL API and it worked well in the following way:
- Runnig application wants to turn on VR
- Oculus session is initialized, gl texture handles obtained for swapchain
- Rendering is blitted into those textures and they are presented
Now with Vulkan things look a bit different, but ideally I would like to keep the workflow:
- Running application wants to turn on VR
- I get a physical device for existing vk instance (already used for usual desktop rendering) via ovr_GetSessionPhysicalDeviceVk (this step works)
- I create swapchain via ovr_CreateTextureSwapChainVk using existing device (this step fails)
- I obtain images to render to
- Rendering is blitted into those images and they are presented
The step that fails uses logical device created during application startup - not a new one I supposed to create from the physical device returned from Oculus SDK call, although physical device LUIDs match.
The questions are:
- Am I supposed to create a new logical device for sure? Can't I recycle the one I already have?
- How is interop between my existing logical device and the one I'll create for Oculus supposed to work? Can I blit (or attach) to the images obtained from oculus swapchain from the images I create using my first device at all?
- Or am I supposed to first create device using Oculus SDK and use it during the whole application lifetime for all the rendering work I do? So basically no hot-load of VR feature.
Thank you!
04-26-2021 06:32 AM
For the devs who will encounter this question: it is possible to attach existing logical device - be sure that vulkan instance and logical device extensions required by Oculus are all enabled.