Quellcode durchsuchen

Add initial SDL3 init call

Patrick-Christopher Mattulat vor 1 Woche
Ursprung
Commit
37de87c502

+ 34 - 3
CMakeLists.txt

@@ -15,6 +15,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
 
 set(MODULE_NAME_CORE ls-atlantis-core)
 set(MODULE_NAME_INTERFACE ls-atlantis-interface)
+set(MODULE_NAME_WINDOW ls-atlantis-window)
 
 set(CMAKE_DEBUG_POSTFIX -d)
 
@@ -39,6 +40,7 @@ find_package(SDL3 REQUIRED)
 
 set(ATLANTIS_CORE_SOURCES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/core/StatusCodeOk.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/core/StatusCodeWindowApiLoadingFailed.cpp
 )
 
 ################################
@@ -57,6 +59,7 @@ target_link_libraries(${MODULE_NAME_CORE} PUBLIC
 
 set(ATLANTIS_CORE_TEST_SOURCES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeOkTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeWindowApiLoadingFailedTest.cpp
 )
 
 ################################
@@ -87,6 +90,7 @@ gtest_discover_tests(${MODULE_NAME_CORE}-tests)
 
 set(ATLANTIS_INTERFACE_SOURCES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/AStatusCode.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/ISdlApi.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/IWindowApi.cpp
 )
 
@@ -96,6 +100,33 @@ set(ATLANTIS_INTERFACE_SOURCES
 
 add_library(${MODULE_NAME_INTERFACE} SHARED ${ATLANTIS_INTERFACE_SOURCES})
 
-#target_link_libraries(${MODULE_NAME_INTERFACE} PUBLIC
-#    SDL3::SDL3
-#)
+target_link_libraries(${MODULE_NAME_INTERFACE} PUBLIC
+        SDL3::SDL3
+)
+
+################################################################
+################################################################
+# Module: Window
+################################################################
+################################################################
+
+################################
+# Source Files: Window Module
+################################
+
+set(ATLANTIS_WINDOW_SOURCES
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlApi.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlWindowApi.cpp
+)
+
+################################
+# Library Creation: Window Module
+################################
+
+add_library(${MODULE_NAME_WINDOW} SHARED ${ATLANTIS_WINDOW_SOURCES})
+
+target_link_libraries(${MODULE_NAME_WINDOW} PUBLIC
+    ${MODULE_NAME_CORE}
+    ${MODULE_NAME_INTERFACE}
+    SDL3::SDL3
+)

+ 23 - 0
include/core/StatusCodeWindowApiLoadingFailed.hpp

@@ -0,0 +1,23 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#ifndef LS_ATLANTIS_ENGINE_WINDOW_STATUS_CODE_WINDOW_API_LOADING_FAILED_HPP
+#define LS_ATLANTIS_ENGINE_WINDOW_STATUS_CODE_WINDOW_API_LOADING_FAILED_HPP
+
+#include <Export.hpp>
+#include <interface/AStatusCode.hpp>
+
+namespace ls::atlantis::core
+{
+  class LS_ATLANTIS_DYNAMIC_GOAL StatusCodeWindowApiLoadingFailed : public ls::atlantis::interfaces::AStatusCode
+  {
+    public:
+
+      StatusCodeWindowApiLoadingFailed();
+      ~StatusCodeWindowApiLoadingFailed() override;
+  };
+}
+
+#endif

+ 2 - 1
include/core/StatusCodes.hpp

@@ -10,7 +10,8 @@ namespace ls::atlantis::core
 {
   enum StatusCodes
   {
-    OK = 1
+    OK = 1,
+    WINDOW_API_LOADING_FAILED = 2
   };
 }
 

+ 26 - 0
include/interface/ISdlApi.hpp

@@ -0,0 +1,26 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#ifndef LS_ATLANTIS_ENGINE_INTERFACE_SDL_API_HPP
+#define LS_ATLANTIS_ENGINE_INTERFACE_SDL_API_HPP
+
+#include <Export.hpp>
+#include <SDL3/SDL.h>
+
+namespace ls::atlantis::interfaces
+{
+  class LS_ATLANTIS_DYNAMIC_GOAL ISdlApi
+  {
+    public:
+
+      ISdlApi();
+      virtual ~ISdlApi();
+
+      virtual int Init(SDL_InitFlags flags) = 0;
+      virtual void Quit() = 0;
+  };
+}
+
+#endif

+ 26 - 0
include/window/SdlApi.hpp

@@ -0,0 +1,26 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#ifndef LS_ATLANTIS_ENGINE_WINDOW_SDL_API_HPP
+#define LS_ATLANTIS_ENGINE_WINDOW_SDL_API_HPP
+
+#include <Export.hpp>
+#include <interface/ISdlApi.hpp>
+
+namespace ls::atlantis::window
+{
+  class LS_ATLANTIS_DYNAMIC_GOAL SdlApi : public ls::atlantis::interfaces::ISdlApi
+  {
+    public:
+
+      SdlApi();
+      ~SdlApi() override;
+
+      int Init(SDL_InitFlags flags) override;
+      void Quit() override;
+  };
+}
+
+#endif

+ 36 - 0
include/window/SdlWindowApi.hpp

@@ -0,0 +1,36 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#ifndef LS_ATLANTIS_ENGINE_WINDOW_SDL_WINDOW_API_HPP
+#define LS_ATLANTIS_ENGINE_WINDOW_SDL_WINDOW_API_HPP
+
+#include <Export.hpp>
+#include <interface/AStatusCode.hpp>
+#include <interface/ISdlApi.hpp>
+#include <interface/IWindowApi.hpp>
+#include <memory>
+
+namespace ls::atlantis::window
+{
+  class LS_ATLANTIS_DYNAMIC_GOAL SdlWindowApi : public ls::atlantis::interfaces::IWindowApi
+  {
+    public:
+
+      SdlWindowApi();
+      explicit SdlWindowApi(const std::shared_ptr<ls::atlantis::interfaces::ISdlApi> &_sdlApi);
+      ~SdlWindowApi() override;
+
+      [[nodiscard]] std::shared_ptr<ls::atlantis::interfaces::AStatusCode> init() override;
+
+    private:
+
+      static std::shared_ptr<ls::atlantis::interfaces::AStatusCode> _createWindow();
+      std::shared_ptr<ls::atlantis::interfaces::AStatusCode> _initApi();
+
+      std::shared_ptr<ls::atlantis::interfaces::ISdlApi> sdlApi{};
+  };
+}
+
+#endif

+ 0 - 3
library/README.md

@@ -1,3 +0,0 @@
-# Library Directory
-
-In this directory all third party libraries are stored.

+ 16 - 0
source/core/StatusCodeWindowApiLoadingFailed.cpp

@@ -0,0 +1,16 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <core/StatusCodeWindowApiLoadingFailed.hpp>
+#include <core/StatusCodes.hpp>
+
+using ls::atlantis::core::StatusCodes;
+using ls::atlantis::interfaces::AStatusCode;
+using ls::atlantis::core::StatusCodeWindowApiLoadingFailed;
+
+StatusCodeWindowApiLoadingFailed::StatusCodeWindowApiLoadingFailed() : AStatusCode(StatusCodes::WINDOW_API_LOADING_FAILED, "window api loading failed")
+{}
+
+StatusCodeWindowApiLoadingFailed::~StatusCodeWindowApiLoadingFailed() = default;

+ 12 - 0
source/interface/ISdlApi.cpp

@@ -0,0 +1,12 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <interface/ISdlApi.hpp>
+
+using ls::atlantis::interfaces::ISdlApi;
+
+ISdlApi::ISdlApi() = default;
+
+ISdlApi::~ISdlApi() = default;

+ 22 - 0
source/window/SdlApi.cpp

@@ -0,0 +1,22 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <window/SdlApi.hpp>
+
+using ls::atlantis::window::SdlApi;
+
+SdlApi::SdlApi() = default;
+
+SdlApi::~SdlApi() = default;
+
+int SdlApi::Init(const SDL_InitFlags flags)
+{
+  return SDL_Init(flags);
+}
+
+void SdlApi::Quit()
+{
+  SDL_Quit();
+}

+ 56 - 0
source/window/SdlWindowApi.cpp

@@ -0,0 +1,56 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <SDL3/SDL.h>
+#include <core/StatusCodeOk.hpp>
+#include <core/StatusCodeWindowApiLoadingFailed.hpp>
+#include <window/SdlApi.hpp>
+#include <window/SdlWindowApi.hpp>
+
+using ls::atlantis::core::StatusCodeOk;
+using ls::atlantis::core::StatusCodeWindowApiLoadingFailed;
+using ls::atlantis::interfaces::AStatusCode;
+using ls::atlantis::interfaces::ISdlApi;
+using ls::atlantis::window::SdlApi;
+using ls::atlantis::window::SdlWindowApi;
+using ::std::make_shared;
+using ::std::shared_ptr;
+
+SdlWindowApi::SdlWindowApi() : SdlWindowApi(make_shared<SdlApi>())
+{
+  // TODO: null check
+}
+
+SdlWindowApi::SdlWindowApi(const shared_ptr<ISdlApi> &_sdlApi) : sdlApi(_sdlApi)
+{
+  // TODO: null check
+}
+
+SdlWindowApi::~SdlWindowApi()
+{
+  sdlApi->Quit();
+}
+
+shared_ptr<AStatusCode> SdlWindowApi::init()
+{
+  return SdlWindowApi::_initApi();
+}
+
+shared_ptr<AStatusCode> SdlWindowApi::_createWindow()
+{
+  return make_shared<StatusCodeOk>();
+}
+
+shared_ptr<AStatusCode> SdlWindowApi::_initApi()
+{
+  shared_ptr<AStatusCode> statusCode = make_shared<StatusCodeOk>();
+
+  if (!sdlApi->Init(SDL_INIT_VIDEO))
+  {
+    statusCode = make_shared<StatusCodeWindowApiLoadingFailed>();
+  }
+
+  return statusCode;
+}

+ 34 - 0
test/core/StatusCodeWindowApiLoadingFailedTest.cpp

@@ -0,0 +1,34 @@
+/*
+ * author: Patrick-Christopher Mattulat
+ * e-mail: webmaster@lynarstudios.com
+ */
+
+#include <core/StatusCodeWindowApiLoadingFailed.hpp>
+#include <core/StatusCodes.hpp>
+#include <gtest/gtest.h>
+
+using ls::atlantis::core::StatusCodeWindowApiLoadingFailed;
+using ls::atlantis::core::StatusCodes;
+using ::std::string;
+using ::testing::Test;
+
+namespace
+{
+  class StatusCodeWindowApiLoadingFailedTest : public Test
+  {
+    public:
+
+      StatusCodeWindowApiLoadingFailedTest() = default;
+      ~StatusCodeWindowApiLoadingFailedTest() override = default;
+  };
+
+  TEST_F(StatusCodeWindowApiLoadingFailedTest, getId)
+  {
+    ASSERT_EQ(StatusCodes::WINDOW_API_LOADING_FAILED, StatusCodeWindowApiLoadingFailed().getId());
+  }
+
+  TEST_F(StatusCodeWindowApiLoadingFailedTest, getText)
+  {
+    ASSERT_EQ(string("window api loading failed"), StatusCodeWindowApiLoadingFailed().getText());
+  }
+}