Merge pull request #832 from per-mathisen-arm/master
Add support for rendering with the headless extension
This commit is contained in:
commit
0887881eac
6 changed files with 68 additions and 5 deletions
|
|
@ -51,6 +51,8 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation)
|
|||
instanceExtensions.push_back(VK_MVK_IOS_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(VK_USE_PLATFORM_MACOS_MVK)
|
||||
instanceExtensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(VK_USE_PLATFORM_HEADLESS_EXT)
|
||||
instanceExtensions.push_back(VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME);
|
||||
#endif
|
||||
|
||||
// Get extensions supported by the instance and store for later use
|
||||
|
|
@ -584,6 +586,40 @@ void VulkanExampleBase::renderLoop()
|
|||
}
|
||||
updateOverlay();
|
||||
}
|
||||
#elif defined(VK_USE_PLATFORM_HEADLESS_EXT)
|
||||
while (!quit)
|
||||
{
|
||||
auto tStart = std::chrono::high_resolution_clock::now();
|
||||
if (viewUpdated)
|
||||
{
|
||||
viewUpdated = false;
|
||||
viewChanged();
|
||||
}
|
||||
render();
|
||||
frameCounter++;
|
||||
auto tEnd = std::chrono::high_resolution_clock::now();
|
||||
auto tDiff = std::chrono::duration<double, std::milli>(tEnd - tStart).count();
|
||||
frameTimer = tDiff / 1000.0f;
|
||||
camera.update(frameTimer);
|
||||
if (camera.moving())
|
||||
{
|
||||
viewUpdated = true;
|
||||
}
|
||||
// Convert to clamped timer value
|
||||
timer += timerSpeed * frameTimer;
|
||||
if (timer > 1.0)
|
||||
{
|
||||
timer -= 1.0f;
|
||||
}
|
||||
float fpsTimer = std::chrono::duration<double, std::milli>(tEnd - lastTimestamp).count();
|
||||
if (fpsTimer > 1000.0f)
|
||||
{
|
||||
lastFPS = (float)frameCounter * (1000.0f / fpsTimer);
|
||||
frameCounter = 0;
|
||||
lastTimestamp = tEnd;
|
||||
}
|
||||
updateOverlay();
|
||||
}
|
||||
#elif (defined(VK_USE_PLATFORM_MACOS_MVK) && defined(VK_EXAMPLE_XCODE_GENERATED))
|
||||
[NSApp run];
|
||||
#endif
|
||||
|
|
@ -2431,6 +2467,10 @@ void VulkanExampleBase::handleEvent(const xcb_generic_event_t *event)
|
|||
break;
|
||||
}
|
||||
}
|
||||
#else
|
||||
void VulkanExampleBase::setupWindow()
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
void VulkanExampleBase::viewChanged() {}
|
||||
|
|
@ -2696,14 +2736,14 @@ void VulkanExampleBase::initSwapchain()
|
|||
swapChain.initSurface(androidApp->window);
|
||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
swapChain.initSurface(view);
|
||||
#elif defined(_DIRECT2DISPLAY)
|
||||
swapChain.initSurface(width, height);
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
swapChain.initSurface(dfb, surface);
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
swapChain.initSurface(display, surface);
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
swapChain.initSurface(connection, window);
|
||||
#elif (defined(_DIRECT2DISPLAY) || defined(VK_USE_PLATFORM_HEADLESS_EXT))
|
||||
swapChain.initSurface(width, height);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue