From 13cefdf9f8fe37ef5179e0fa826a9a4672468d47 Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Fri, 28 Jul 2023 18:09:11 +0200 Subject: [PATCH] Refactor app creation for better iOS support --- openVulkanoCpp/ExampleApps/CubesExampleApp.cpp | 7 ++++++- openVulkanoCpp/ExampleApps/CubesExampleApp.hpp | 4 +++- openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h | 1 + openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm | 9 ++++++++- openVulkanoCpp/main.cpp | 2 +- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/openVulkanoCpp/ExampleApps/CubesExampleApp.cpp b/openVulkanoCpp/ExampleApps/CubesExampleApp.cpp index ef8c8e3..fcbbd13 100644 --- a/openVulkanoCpp/ExampleApps/CubesExampleApp.cpp +++ b/openVulkanoCpp/ExampleApps/CubesExampleApp.cpp @@ -95,7 +95,12 @@ public: void Close() override{} }; -std::unique_ptr CubesExampleApp::Create() +openVulkanoCpp::IGraphicsApp* CubesExampleApp::Create() +{ + return new CubesExampleAppImpl(); +} + +std::unique_ptr CubesExampleApp::CreateUnique() { return std::make_unique(); } diff --git a/openVulkanoCpp/ExampleApps/CubesExampleApp.hpp b/openVulkanoCpp/ExampleApps/CubesExampleApp.hpp index 1934a6a..ad9ce8d 100644 --- a/openVulkanoCpp/ExampleApps/CubesExampleApp.hpp +++ b/openVulkanoCpp/ExampleApps/CubesExampleApp.hpp @@ -12,5 +12,7 @@ class CubesExampleApp : public openVulkanoCpp::IGraphicsApp { public: - static std::unique_ptr Create(); + static openVulkanoCpp::IGraphicsApp* Create(); + + static std::unique_ptr CreateUnique(); }; diff --git a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h index 8b107f9..1174682 100644 --- a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h +++ b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h @@ -12,6 +12,7 @@ /** The main view controller for the demo storyboard. */ @interface OpenVulkanoViewController : UIViewController +-(void*) makeGraphicsApp; @end diff --git a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm index 0404f50..08e3fb3 100644 --- a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm +++ b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm @@ -90,6 +90,10 @@ public: std::unique_ptr app; } +-(void*) makeGraphicsApp { + return CubesExampleApp::Create(); +} + -(void) dealloc { manager->ShutDown(); [_displayLink release]; @@ -106,7 +110,10 @@ public: auto sizeX = size.width * self.view.contentScaleFactor; auto sizeY = size.height * self.view.contentScaleFactor; window.Init(self.view.layer, {sizeX, sizeY}); - app = CubesExampleApp::Create(); + //TODO check if type is correct + IGraphicsApp* appPtr = static_cast(self.makeGraphicsApp); + if (!appPtr) throw std::runtime_error("Failed to create graphics app"); + app = std::unique_ptr(appPtr); manager = new GraphicsAppManager(app.get(), &window); manager->StartUp(); diff --git a/openVulkanoCpp/main.cpp b/openVulkanoCpp/main.cpp index d03a9e2..c53641a 100644 --- a/openVulkanoCpp/main.cpp +++ b/openVulkanoCpp/main.cpp @@ -12,7 +12,7 @@ using namespace openVulkanoCpp; int main(int argc, char** argv) { - std::unique_ptr app = CubesExampleApp::Create(); + std::unique_ptr app = CubesExampleApp::CreateUnique(); GraphicsAppManager manager(app.get()); manager.Run(); return 0;