Play-/Source/ui_qt/GSH_VulkanQt.cpp

74 lines
1.8 KiB
C++
Raw Normal View History

#include "GSH_VulkanQt.h"
#include <QWindow>
#include <QVulkanInstance>
CGSH_VulkanQt::CGSH_VulkanQt(QWindow* renderWindow)
: m_renderWindow(renderWindow)
{
}
CGSH_VulkanQt::FactoryFunction CGSH_VulkanQt::GetFactoryFunction(QWindow* renderWindow)
{
return [renderWindow]() { return new CGSH_VulkanQt(renderWindow); };
}
void CGSH_VulkanQt::InitializeImpl()
{
2019-09-26 13:39:27 -04:00
#ifdef USE_MACOS_MOLTENVK
//Initialize for macOS
VkInstanceCreateInfo info = {};
const char* extensions[] = { VK_KHR_SURFACE_EXTENSION_NAME, VK_MVK_MACOS_SURFACE_EXTENSION_NAME };
info.enabledExtensionCount = 2;
info.ppEnabledExtensionNames = extensions;
m_instance = Framework::Vulkan::CInstance(info);
2019-09-26 13:39:27 -04:00
VkMacOSSurfaceCreateInfoMVK surfaceCreateInfo = {};
surfaceCreateInfo.pView = reinterpret_cast<const void*>(m_renderWindow->winId());
auto result = m_instance.vkCreateMacOSSurfaceMVK(m_instance, &surfaceCreateInfo, nullptr, &m_context->surface);
CHECKVULKANERROR(result);
#else
//Generic initialization
m_qtVulkanInstance = new QVulkanInstance();
2019-09-15 12:33:41 -04:00
#ifdef _DEBUG
m_qtVulkanInstance->setLayers(QByteArrayList()
<< "VK_LAYER_LUNARG_standard_validation"
<< "VK_LAYER_GOOGLE_threading"
<< "VK_LAYER_LUNARG_param_checker"
<< "VK_LAYER_LUNARG_object_tracker");
#endif
bool succeeded = m_qtVulkanInstance->create();
Q_ASSERT(succeeded);
m_renderWindow->setVulkanInstance(m_qtVulkanInstance);
m_instance = Framework::Vulkan::CInstance(m_qtVulkanInstance->vkInstance());
m_context->surface = m_qtVulkanInstance->surfaceForWindow(m_renderWindow);
2019-09-26 13:39:27 -04:00
#endif
CGSH_Vulkan::InitializeImpl();
}
void CGSH_VulkanQt::ReleaseImpl()
{
CGSH_Vulkan::ReleaseImpl();
2019-09-27 08:33:25 -04:00
#ifdef USE_GENERIC_QTVULKAN
delete m_qtVulkanInstance;
2019-09-26 13:39:27 -04:00
#endif
}
void CGSH_VulkanQt::PresentBackbuffer()
{
if(m_renderWindow->isExposed())
{
2019-09-27 08:33:25 -04:00
#ifdef USE_GENERIC_QTVULKAN
m_qtVulkanInstance->presentQueued(m_renderWindow);
2019-09-26 13:39:27 -04:00
#endif
}
}