summaryrefslogtreecommitdiffstats
path: root/platform/macos
diff options
context:
space:
mode:
authorDario <dariosamo@gmail.com>2023-12-19 14:57:56 -0300
committerDario <dariosamo@gmail.com>2024-02-12 10:02:18 -0300
commit73eff10c76c201a083193c044de1836217b4d72b (patch)
tree30c75b2d6c8c3bd9adaefb7b3c615ab13dfbe4db /platform/macos
parentf317cc713aa4dbcee2efa10db764473a56680be7 (diff)
downloadredot-engine-73eff10c76c201a083193c044de1836217b4d72b.tar.gz
Finish splitting functionality of the Vulkan and D3D12 backends into RenderingDeviceDriver.
Diffstat (limited to 'platform/macos')
-rw-r--r--platform/macos/SCsub2
-rw-r--r--platform/macos/display_server_macos.h4
-rw-r--r--platform/macos/display_server_macos.mm72
-rw-r--r--platform/macos/rendering_context_driver_vulkan_macos.h (renamed from platform/macos/vulkan_context_macos.h)21
-rw-r--r--platform/macos/rendering_context_driver_vulkan_macos.mm (renamed from platform/macos/vulkan_context_macos.mm)33
5 files changed, 73 insertions, 59 deletions
diff --git a/platform/macos/SCsub b/platform/macos/SCsub
index ad19f12c58..5a93c3a09f 100644
--- a/platform/macos/SCsub
+++ b/platform/macos/SCsub
@@ -24,7 +24,7 @@ files = [
"dir_access_macos.mm",
"tts_macos.mm",
"joypad_macos.cpp",
- "vulkan_context_macos.mm",
+ "rendering_context_driver_vulkan_macos.mm",
"gl_manager_macos_angle.mm",
"gl_manager_macos_legacy.mm",
]
diff --git a/platform/macos/display_server_macos.h b/platform/macos/display_server_macos.h
index 24d4a349e2..e298b54970 100644
--- a/platform/macos/display_server_macos.h
+++ b/platform/macos/display_server_macos.h
@@ -43,7 +43,7 @@
#include "servers/rendering/rendering_device.h"
#if defined(VULKAN_ENABLED)
-#include "vulkan_context_macos.h"
+#include "rendering_context_driver_vulkan_macos.h"
#endif // VULKAN_ENABLED
#endif // RD_ENABLED
@@ -137,7 +137,7 @@ private:
GLManagerANGLE_MacOS *gl_manager_angle = nullptr;
#endif
#if defined(RD_ENABLED)
- ApiContextRD *context_rd = nullptr;
+ RenderingContextDriver *rendering_context = nullptr;
RenderingDevice *rendering_device = nullptr;
#endif
String rendering_driver;
diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm
index cad8435cbb..ad8afaf46b 100644
--- a/platform/macos/display_server_macos.mm
+++ b/platform/macos/display_server_macos.mm
@@ -195,10 +195,10 @@ DisplayServerMacOS::WindowID DisplayServerMacOS::_create_window(WindowMode p_mod
}
#if defined(RD_ENABLED)
- if (context_rd) {
+ if (rendering_context) {
union {
#ifdef VULKAN_ENABLED
- VulkanContextMacOS::WindowPlatformData vulkan;
+ RenderingContextDriverVulkanMacOS::WindowPlatformData vulkan;
#endif
} wpd;
#ifdef VULKAN_ENABLED
@@ -206,8 +206,11 @@ DisplayServerMacOS::WindowID DisplayServerMacOS::_create_window(WindowMode p_mod
wpd.vulkan.view_ptr = &wd.window_view;
}
#endif
- Error err = context_rd->window_create(window_id_counter, p_vsync_mode, p_rect.size.width, p_rect.size.height, &wpd);
- ERR_FAIL_COND_V_MSG(err != OK, INVALID_WINDOW_ID, vformat("Can't create a %s context", context_rd->get_api_name()));
+ Error err = rendering_context->window_create(window_id_counter, &wpd);
+ ERR_FAIL_COND_V_MSG(err != OK, INVALID_WINDOW_ID, vformat("Can't create a %s context", rendering_driver));
+
+ rendering_context->window_set_size(window_id_counter, p_rect.size.width, p_rect.size.height);
+ rendering_context->window_set_vsync_mode(window_id_counter, p_vsync_mode);
}
#endif
#if defined(GLES3_ENABLED)
@@ -257,11 +260,6 @@ DisplayServerMacOS::WindowID DisplayServerMacOS::_create_window(WindowMode p_mod
gl_manager_angle->window_resize(id, wd.size.width, wd.size.height);
}
#endif
-#if defined(RD_ENABLED)
- if (context_rd) {
- context_rd->window_resize(id, wd.size.width, wd.size.height);
- }
-#endif
return id;
}
@@ -791,8 +789,12 @@ void DisplayServerMacOS::window_destroy(WindowID p_window) {
}
#endif
#ifdef RD_ENABLED
- if (context_rd) {
- context_rd->window_destroy(p_window);
+ if (rendering_device) {
+ rendering_device->screen_free(p_window);
+ }
+
+ if (rendering_context) {
+ rendering_context->window_destroy(p_window);
}
#endif
windows.erase(p_window);
@@ -800,6 +802,11 @@ void DisplayServerMacOS::window_destroy(WindowID p_window) {
}
void DisplayServerMacOS::window_resize(WindowID p_window, int p_width, int p_height) {
+#if defined(RD_ENABLED)
+ if (rendering_context) {
+ rendering_context->window_set_size(p_window, p_width, p_height);
+ }
+#endif
#if defined(GLES3_ENABLED)
if (gl_manager_legacy) {
gl_manager_legacy->window_resize(p_window, p_width, p_height);
@@ -808,11 +815,6 @@ void DisplayServerMacOS::window_resize(WindowID p_window, int p_width, int p_hei
gl_manager_angle->window_resize(p_window, p_width, p_height);
}
#endif
-#if defined(VULKAN_ENABLED)
- if (context_rd) {
- context_rd->window_resize(p_window, p_width, p_height);
- }
-#endif
}
bool DisplayServerMacOS::has_feature(Feature p_feature) const {
@@ -2850,7 +2852,11 @@ DisplayServer::WindowID DisplayServerMacOS::create_sub_window(WindowMode p_mode,
window_set_flag(WindowFlags(i), true, id);
}
}
-
+#ifdef RD_ENABLED
+ if (rendering_device) {
+ rendering_device->screen_create(id);
+ }
+#endif
return id;
}
@@ -3811,8 +3817,8 @@ void DisplayServerMacOS::window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_
}
#endif
#if defined(VULKAN_ENABLED)
- if (context_rd) {
- context_rd->set_vsync_mode(p_window, p_vsync_mode);
+ if (rendering_context) {
+ rendering_context->window_set_vsync_mode(p_window, p_vsync_mode);
}
#endif
}
@@ -3828,8 +3834,8 @@ DisplayServer::VSyncMode DisplayServerMacOS::window_get_vsync_mode(WindowID p_wi
}
#endif
#if defined(VULKAN_ENABLED)
- if (context_rd) {
- return context_rd->get_vsync_mode(p_window);
+ if (rendering_context) {
+ return rendering_context->window_get_vsync_mode(p_window);
}
#endif
return DisplayServer::VSYNC_ENABLED;
@@ -4632,16 +4638,16 @@ DisplayServerMacOS::DisplayServerMacOS(const String &p_rendering_driver, WindowM
#if defined(RD_ENABLED)
#if defined(VULKAN_ENABLED)
if (rendering_driver == "vulkan") {
- context_rd = memnew(VulkanContextMacOS);
+ rendering_context = memnew(RenderingContextDriverVulkanMacOS);
}
#endif
- if (context_rd) {
- if (context_rd->initialize() != OK) {
- memdelete(context_rd);
- context_rd = nullptr;
+ if (rendering_context) {
+ if (rendering_context->initialize() != OK) {
+ memdelete(rendering_context);
+ rendering_context = nullptr;
r_error = ERR_CANT_CREATE;
- ERR_FAIL_MSG("Could not initialize Vulkan");
+ ERR_FAIL_MSG("Could not initialize " + rendering_driver);
}
}
#endif
@@ -4676,9 +4682,10 @@ DisplayServerMacOS::DisplayServerMacOS(const String &p_rendering_driver, WindowM
}
#endif
#if defined(RD_ENABLED)
- if (context_rd) {
+ if (rendering_context) {
rendering_device = memnew(RenderingDevice);
- rendering_device->initialize(context_rd);
+ rendering_device->initialize(rendering_context, MAIN_WINDOW_ID);
+ rendering_device->screen_create(MAIN_WINDOW_ID);
RendererCompositorRD::make_current();
}
@@ -4714,14 +4721,13 @@ DisplayServerMacOS::~DisplayServerMacOS() {
#endif
#if defined(RD_ENABLED)
if (rendering_device) {
- rendering_device->finalize();
memdelete(rendering_device);
rendering_device = nullptr;
}
- if (context_rd) {
- memdelete(context_rd);
- context_rd = nullptr;
+ if (rendering_context) {
+ memdelete(rendering_context);
+ rendering_context = nullptr;
}
#endif
diff --git a/platform/macos/vulkan_context_macos.h b/platform/macos/rendering_context_driver_vulkan_macos.h
index 6205877120..bbc67581db 100644
--- a/platform/macos/vulkan_context_macos.h
+++ b/platform/macos/rendering_context_driver_vulkan_macos.h
@@ -1,5 +1,5 @@
/**************************************************************************/
-/* vulkan_context_macos.h */
+/* rendering_context_driver_vulkan_macos.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,28 +28,31 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
-#ifndef VULKAN_CONTEXT_MACOS_H
-#define VULKAN_CONTEXT_MACOS_H
+#ifndef RENDERING_CONTEXT_DRIVER_VULKAN_MACOS_H
+#define RENDERING_CONTEXT_DRIVER_VULKAN_MACOS_H
#ifdef VULKAN_ENABLED
-#include "drivers/vulkan/vulkan_context.h"
+#include "drivers/vulkan/rendering_context_driver_vulkan.h"
#import <AppKit/AppKit.h>
-class VulkanContextMacOS : public VulkanContext {
+class RenderingContextDriverVulkanMacOS : public RenderingContextDriverVulkan {
+private:
virtual const char *_get_platform_surface_extension() const override final;
+protected:
+ SurfaceID surface_create(const void *p_platform_data) override final;
+
public:
struct WindowPlatformData {
const id *view_ptr;
};
- virtual Error window_create(DisplayServer::WindowID p_window_id, DisplayServer::VSyncMode p_vsync_mode, int p_width, int p_height, const void *p_platform_data) override final;
- VulkanContextMacOS();
- ~VulkanContextMacOS();
+ RenderingContextDriverVulkanMacOS();
+ ~RenderingContextDriverVulkanMacOS();
};
#endif // VULKAN_ENABLED
-#endif // VULKAN_CONTEXT_MACOS_H
+#endif // RENDERING_CONTEXT_DRIVER_VULKAN_MACOS_H
diff --git a/platform/macos/vulkan_context_macos.mm b/platform/macos/rendering_context_driver_vulkan_macos.mm
index 18c3bda39b..e0f8bf9e67 100644
--- a/platform/macos/vulkan_context_macos.mm
+++ b/platform/macos/rendering_context_driver_vulkan_macos.mm
@@ -1,5 +1,5 @@
/**************************************************************************/
-/* vulkan_context_macos.mm */
+/* rendering_context_driver_vulkan_macos.mm */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,7 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
-#include "vulkan_context_macos.h"
+#include "rendering_context_driver_vulkan_macos.h"
#ifdef VULKAN_ENABLED
@@ -38,27 +38,32 @@
#include <vulkan/vulkan.h>
#endif
-const char *VulkanContextMacOS::_get_platform_surface_extension() const {
+const char *RenderingContextDriverVulkanMacOS::_get_platform_surface_extension() const {
return VK_MVK_MACOS_SURFACE_EXTENSION_NAME;
}
-Error VulkanContextMacOS::window_create(DisplayServer::WindowID p_window_id, DisplayServer::VSyncMode p_vsync_mode, int p_width, int p_height, const void *p_platform_data) {
- const WindowPlatformData *wpd = (const WindowPlatformData *)p_platform_data;
+RenderingContextDriver::SurfaceID RenderingContextDriverVulkanMacOS::surface_create(const void *p_platform_data) {
+ const WindowPlatformData *wpd = (const WindowPlatformData *)(p_platform_data);
- VkMacOSSurfaceCreateInfoMVK createInfo = {};
- createInfo.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
- createInfo.pView = (__bridge const void *)(*wpd->view_ptr);
+ VkMacOSSurfaceCreateInfoMVK create_info = {};
+ create_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
+ create_info.pView = (__bridge const void *)(*wpd->view_ptr);
- VkSurfaceKHR surface = VK_NULL_HANDLE;
- VkResult err = vkCreateMacOSSurfaceMVK(get_instance(), &createInfo, nullptr, &surface);
- ERR_FAIL_COND_V(err, ERR_CANT_CREATE);
- return _window_create(p_window_id, p_vsync_mode, surface, p_width, p_height);
+ VkSurfaceKHR vk_surface = VK_NULL_HANDLE;
+ VkResult err = vkCreateMacOSSurfaceMVK(instance_get(), &create_info, nullptr, &vk_surface);
+ ERR_FAIL_COND_V(err != VK_SUCCESS, SurfaceID());
+
+ Surface *surface = memnew(Surface);
+ surface->vk_surface = vk_surface;
+ return SurfaceID(surface);
}
-VulkanContextMacOS::VulkanContextMacOS() {
+RenderingContextDriverVulkanMacOS::RenderingContextDriverVulkanMacOS() {
+ // Does nothing.
}
-VulkanContextMacOS::~VulkanContextMacOS() {
+RenderingContextDriverVulkanMacOS::~RenderingContextDriverVulkanMacOS() {
+ // Does nothing.
}
#endif // VULKAN_ENABLED