summaryrefslogtreecommitdiffstats
path: root/platform/ios
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/ios
parentf317cc713aa4dbcee2efa10db764473a56680be7 (diff)
downloadredot-engine-73eff10c76c201a083193c044de1836217b4d72b.tar.gz
Finish splitting functionality of the Vulkan and D3D12 backends into RenderingDeviceDriver.
Diffstat (limited to 'platform/ios')
-rw-r--r--platform/ios/SCsub2
-rw-r--r--platform/ios/display_server_ios.h4
-rw-r--r--platform/ios/display_server_ios.mm54
-rw-r--r--platform/ios/os_ios.h2
-rw-r--r--platform/ios/rendering_context_driver_vulkan_ios.h (renamed from platform/ios/vulkan_context_ios.h)21
-rw-r--r--platform/ios/rendering_context_driver_vulkan_ios.mm (renamed from platform/ios/vulkan_context_ios.mm)34
6 files changed, 65 insertions, 52 deletions
diff --git a/platform/ios/SCsub b/platform/ios/SCsub
index 30d4216464..d7c950967c 100644
--- a/platform/ios/SCsub
+++ b/platform/ios/SCsub
@@ -9,7 +9,7 @@ ios_lib = [
"app_delegate.mm",
"view_controller.mm",
"ios.mm",
- "vulkan_context_ios.mm",
+ "rendering_context_driver_vulkan_ios.mm",
"display_server_ios.mm",
"joypad_ios.mm",
"godot_view.mm",
diff --git a/platform/ios/display_server_ios.h b/platform/ios/display_server_ios.h
index 3fdcc07f0b..3efd2498d4 100644
--- a/platform/ios/display_server_ios.h
+++ b/platform/ios/display_server_ios.h
@@ -39,7 +39,7 @@
#include "servers/rendering/rendering_device.h"
#if defined(VULKAN_ENABLED)
-#import "vulkan_context_ios.h"
+#import "rendering_context_driver_vulkan_ios.h"
#ifdef USE_VOLK
#include <volk.h>
@@ -62,7 +62,7 @@ class DisplayServerIOS : public DisplayServer {
_THREAD_SAFE_CLASS_
#if defined(RD_ENABLED)
- ApiContextRD *context_rd = nullptr;
+ RenderingContextDriver *rendering_context = nullptr;
RenderingDevice *rendering_device = nullptr;
#endif
diff --git a/platform/ios/display_server_ios.mm b/platform/ios/display_server_ios.mm
index 9c671f2ea9..c371f2777c 100644
--- a/platform/ios/display_server_ios.mm
+++ b/platform/ios/display_server_ios.mm
@@ -63,14 +63,14 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode
}
#if defined(RD_ENABLED)
- context_rd = nullptr;
+ rendering_context = nullptr;
rendering_device = nullptr;
CALayer *layer = nullptr;
union {
#ifdef VULKAN_ENABLED
- VulkanContextIOS::WindowPlatformData vulkan;
+ RenderingContextDriverVulkanIOS::WindowPlatformData vulkan;
#endif
} wpd;
@@ -81,29 +81,33 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode
ERR_FAIL_MSG("Failed to create iOS Vulkan rendering layer.");
}
wpd.vulkan.layer_ptr = &layer;
- context_rd = memnew(VulkanContextIOS);
+ rendering_context = memnew(RenderingContextDriverVulkanIOS);
}
#endif
- if (context_rd) {
- if (context_rd->initialize() != OK) {
- ERR_PRINT(vformat("Failed to initialize %s context", context_rd->get_api_name()));
- memdelete(context_rd);
- context_rd = nullptr;
+ if (rendering_context) {
+ if (rendering_context->initialize() != OK) {
+ ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver));
+ memdelete(rendering_context);
+ rendering_context = nullptr;
return;
}
- Size2i size = Size2i(layer.bounds.size.width, layer.bounds.size.height) * screen_get_max_scale();
- if (context_rd->window_create(MAIN_WINDOW_ID, p_vsync_mode, size.width, size.height, &wpd) != OK) {
- ERR_PRINT(vformat("Failed to create %s window.", context_rd->get_api_name()));
- memdelete(context_rd);
- context_rd = nullptr;
+ if (rendering_context->window_create(MAIN_WINDOW_ID, &wpd) != OK) {
+ ERR_PRINT(vformat("Failed to create %s window.", rendering_driver));
+ memdelete(rendering_context);
+ rendering_context = nullptr;
r_error = ERR_UNAVAILABLE;
return;
}
+ Size2i size = Size2i(layer.bounds.size.width, layer.bounds.size.height) * screen_get_max_scale();
+ rendering_context->window_set_size(MAIN_WINDOW_ID, size.width, size.height);
+ rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode);
+
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();
}
@@ -132,15 +136,15 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode
DisplayServerIOS::~DisplayServerIOS() {
#if defined(RD_ENABLED)
if (rendering_device) {
- rendering_device->finalize();
+ rendering_device->screen_free(MAIN_WINDOW_ID);
memdelete(rendering_device);
rendering_device = nullptr;
}
- if (context_rd) {
- context_rd->window_destroy(MAIN_WINDOW_ID);
- memdelete(context_rd);
- context_rd = nullptr;
+ if (rendering_context) {
+ rendering_context->window_destroy(MAIN_WINDOW_ID);
+ memdelete(rendering_context);
+ rendering_context = nullptr;
}
#endif
}
@@ -714,8 +718,8 @@ void DisplayServerIOS::resize_window(CGSize viewSize) {
Size2i size = Size2i(viewSize.width, viewSize.height) * screen_get_max_scale();
#if defined(RD_ENABLED)
- if (context_rd) {
- context_rd->window_resize(MAIN_WINDOW_ID, size.x, size.y);
+ if (rendering_context) {
+ rendering_context->window_set_size(MAIN_WINDOW_ID, size.x, size.y);
}
#endif
@@ -726,8 +730,8 @@ void DisplayServerIOS::resize_window(CGSize viewSize) {
void DisplayServerIOS::window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window) {
_THREAD_SAFE_METHOD_
#if defined(RD_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
}
@@ -735,8 +739,8 @@ void DisplayServerIOS::window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mo
DisplayServer::VSyncMode DisplayServerIOS::window_get_vsync_mode(WindowID p_window) const {
_THREAD_SAFE_METHOD_
#if defined(RD_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;
diff --git a/platform/ios/os_ios.h b/platform/ios/os_ios.h
index 06724d763f..2d985a6c0b 100644
--- a/platform/ios/os_ios.h
+++ b/platform/ios/os_ios.h
@@ -45,7 +45,7 @@
#include "servers/rendering/rendering_device.h"
#if defined(VULKAN_ENABLED)
-#import "vulkan_context_ios.h"
+#import "rendering_context_driver_vulkan_ios.h"
#endif
#endif
diff --git a/platform/ios/vulkan_context_ios.h b/platform/ios/rendering_context_driver_vulkan_ios.h
index cdc8b618af..0778993a05 100644
--- a/platform/ios/vulkan_context_ios.h
+++ b/platform/ios/rendering_context_driver_vulkan_ios.h
@@ -1,5 +1,5 @@
/**************************************************************************/
-/* vulkan_context_ios.h */
+/* rendering_context_driver_vulkan_ios.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_IOS_H
-#define VULKAN_CONTEXT_IOS_H
+#ifndef RENDERING_CONTEXT_DRIVER_VULKAN_IOS_H
+#define RENDERING_CONTEXT_DRIVER_VULKAN_IOS_H
#ifdef VULKAN_ENABLED
-#include "drivers/vulkan/vulkan_context.h"
+#include "drivers/vulkan/rendering_context_driver_vulkan.h"
#import <UIKit/UIKit.h>
-class VulkanContextIOS : public VulkanContext {
+class RenderingContextDriverVulkanIOS : 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 {
CALayer *const *layer_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;
- VulkanContextIOS();
- ~VulkanContextIOS();
+ RenderingContextDriverVulkanIOS();
+ ~RenderingContextDriverVulkanIOS();
};
#endif // VULKAN_ENABLED
-#endif // VULKAN_CONTEXT_IOS_H
+#endif // RENDERING_CONTEXT_DRIVER_VULKAN_IOS_H
diff --git a/platform/ios/vulkan_context_ios.mm b/platform/ios/rendering_context_driver_vulkan_ios.mm
index 014e05f2e6..7e9c3e0e44 100644
--- a/platform/ios/vulkan_context_ios.mm
+++ b/platform/ios/rendering_context_driver_vulkan_ios.mm
@@ -1,5 +1,5 @@
/**************************************************************************/
-/* vulkan_context_ios.mm */
+/* rendering_context_driver_vulkan_ios.mm */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,7 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
-#import "vulkan_context_ios.h"
+#import "rendering_context_driver_vulkan_ios.h"
#ifdef VULKAN_ENABLED
@@ -38,26 +38,32 @@
#include <vulkan/vulkan.h>
#endif
-const char *VulkanContextIOS::_get_platform_surface_extension() const {
+const char *RenderingContextDriverVulkanIOS::_get_platform_surface_extension() const {
return VK_MVK_IOS_SURFACE_EXTENSION_NAME;
}
-Error VulkanContextIOS::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 RenderingContextDriverVulkanIOS::surface_create(const void *p_platform_data) {
+ const WindowPlatformData *wpd = (const WindowPlatformData *)(p_platform_data);
- VkIOSSurfaceCreateInfoMVK createInfo = {};
- createInfo.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
- createInfo.pView = (__bridge const void *)(*wpd->layer_ptr);
+ VkIOSSurfaceCreateInfoMVK create_info = {};
+ create_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
+ create_info.pView = (__bridge const void *)(*wpd->layer_ptr);
- VkSurfaceKHR surface = VK_NULL_HANDLE;
- VkResult err = vkCreateIOSSurfaceMVK(get_instance(), &createInfo, nullptr, &surface);
- ERR_FAIL_COND_V(err, ERR_CANT_CREATE);
+ VkSurfaceKHR vk_surface = VK_NULL_HANDLE;
+ VkResult err = vkCreateIOSSurfaceMVK(instance_get(), &create_info, nullptr, &vk_surface);
+ ERR_FAIL_COND_V(err != VK_SUCCESS, SurfaceID());
- return _window_create(p_window_id, p_vsync_mode, surface, p_width, p_height);
+ Surface *surface = memnew(Surface);
+ surface->vk_surface = vk_surface;
+ return SurfaceID(surface);
}
-VulkanContextIOS::VulkanContextIOS() {}
+RenderingContextDriverVulkanIOS::RenderingContextDriverVulkanIOS() {
+ // Does nothing.
+}
-VulkanContextIOS::~VulkanContextIOS() {}
+RenderingContextDriverVulkanIOS::~RenderingContextDriverVulkanIOS() {
+ // Does nothing.
+}
#endif // VULKAN_ENABLED