mirror of
https://github.com/jpd002/Play-.git
synced 2025-04-28 13:47:57 +03:00
Fix MoltenVK integration with more recent Vulkan SDKs.
This commit is contained in:
parent
01d094c0c3
commit
06d5188cc5
6 changed files with 37 additions and 5 deletions
|
@ -273,6 +273,8 @@ if(TARGET_PLATFORM_MACOS)
|
|||
${QT_SOURCES}
|
||||
macos/InputProviderMacOsHid.cpp
|
||||
macos/InputProviderMacOsHid.h
|
||||
macos/LayerFromView.mm
|
||||
macos/LayerFromView.h
|
||||
)
|
||||
FILE(GLOB ARCADE_DEFS ${CMAKE_CURRENT_SOURCE_DIR}/../../arcadedefs/*.arcadedef)
|
||||
set(OSX_RES
|
||||
|
@ -283,7 +285,8 @@ if(TARGET_PLATFORM_MACOS)
|
|||
list(APPEND OSX_RES ${CMAKE_CURRENT_SOURCE_DIR}/../../ee_functions.xml)
|
||||
endif()
|
||||
if(USE_GSH_VULKAN)
|
||||
list(APPEND OSX_RES $ENV{VULKAN_SDK}/../MoltenVK/dylib/macOS/libMoltenVk.dylib)
|
||||
cmake_path(GET Vulkan_LIBRARY PARENT_PATH VULKAN_LIB_DIR)
|
||||
list(APPEND OSX_RES ${VULKAN_LIB_DIR}/libMoltenVk.dylib)
|
||||
endif()
|
||||
add_executable(Play MACOSX_BUNDLE ${QT_SOURCES} ${QT_MOC_SRCS} ${QT_RES_SOURCES} ${QT_UI_HEADERS} ${OSX_RES} ${ARCADE_DEFS})
|
||||
# Set a custom plist file for the app bundle
|
||||
|
@ -306,9 +309,6 @@ if(TARGET_PLATFORM_MACOS)
|
|||
)
|
||||
SET_SOURCE_FILES_PROPERTIES(${ARCADE_DEFS} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources/arcadedefs")
|
||||
list(APPEND UI_QT_PROJECT_LIBS "-framework IOKit -framework CoreFoundation")
|
||||
if(USE_GSH_VULKAN)
|
||||
target_include_directories(Play PRIVATE $ENV{VULKAN_SDK}/../MoltenVK/include)
|
||||
endif()
|
||||
elseif(TARGET_PLATFORM_WIN32)
|
||||
set(QT_SOURCES
|
||||
${QT_SOURCES}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "GSH_VulkanQt.h"
|
||||
#include "vulkan/StructDefs.h"
|
||||
#include "vulkan/Loader.h"
|
||||
#include "vulkanwindow.h"
|
||||
#include <QWindow>
|
||||
#include <QGuiApplication>
|
||||
|
||||
|
@ -37,7 +38,7 @@ void CGSH_VulkanQt::InitializeImpl()
|
|||
|
||||
#ifdef __APPLE__
|
||||
VkMacOSSurfaceCreateInfoMVK surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.pView = reinterpret_cast<const void*>(m_renderWindow->winId());
|
||||
surfaceCreateInfo.pView = static_cast<VulkanWindow*>(m_renderWindow)->GetMetalLayer();
|
||||
auto result = m_instance.vkCreateMacOSSurfaceMVK(m_instance, &surfaceCreateInfo, nullptr, &m_context->surface);
|
||||
CHECKVULKANERROR(result);
|
||||
#endif
|
||||
|
|
3
Source/ui_qt/macos/LayerFromView.h
Normal file
3
Source/ui_qt/macos/LayerFromView.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
void* GetLayerFromView(void*);
|
8
Source/ui_qt/macos/LayerFromView.mm
Normal file
8
Source/ui_qt/macos/LayerFromView.mm
Normal file
|
@ -0,0 +1,8 @@
|
|||
#include "LayerFromView.h"
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
void* GetLayerFromView(void* viewPtr)
|
||||
{
|
||||
NSView* view = (NSView*)viewPtr;
|
||||
return [view layer];
|
||||
}
|
|
@ -1,7 +1,18 @@
|
|||
#include "vulkanwindow.h"
|
||||
#include "macos/LayerFromView.h"
|
||||
|
||||
VulkanWindow::VulkanWindow(QWindow* parent)
|
||||
: OutputWindow(parent)
|
||||
{
|
||||
setSurfaceType(QWindow::VulkanSurface);
|
||||
#ifdef __APPLE__
|
||||
m_metalLayer = GetLayerFromView(reinterpret_cast<void*>(winId()));
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
void* VulkanWindow::GetMetalLayer() const
|
||||
{
|
||||
return m_metalLayer;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -8,4 +8,13 @@ class VulkanWindow : public OutputWindow
|
|||
public:
|
||||
explicit VulkanWindow(QWindow* parent = 0);
|
||||
~VulkanWindow() = default;
|
||||
|
||||
#ifdef __APPLE__
|
||||
void* GetMetalLayer() const;
|
||||
#endif
|
||||
|
||||
private:
|
||||
#ifdef __APPLE__
|
||||
void* m_metalLayer = nullptr;
|
||||
#endif
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue