diff --git a/ConjureEngine/CMakeLists.txt b/ConjureEngine/CMakeLists.txt index 729604b..44a802d 100644 --- a/ConjureEngine/CMakeLists.txt +++ b/ConjureEngine/CMakeLists.txt @@ -21,6 +21,11 @@ find_package(glm REQUIRED) find_package(SDL2 REQUIRED) find_package(Vulkan REQUIRED) +IF (WIN32) + define_property(TARGET PROPERTY VK_PROTOTYPES ) + define_property(TARGET PROPERTY VK_USE_PLATFORM_WIN32_KHR) +endif () + add_library(${PROJECT_NAME} STATIC ${HEADER_FILES} ${SOURCES_FILES}) # Specify include directories diff --git a/ConjureEngine/src/ConjureEngine/Application.cpp b/ConjureEngine/src/ConjureEngine/Application.cpp index 5333878..1530cb9 100644 --- a/ConjureEngine/src/ConjureEngine/Application.cpp +++ b/ConjureEngine/src/ConjureEngine/Application.cpp @@ -6,6 +6,13 @@ namespace ConjureEngine { Application::Application(const ApplicationInfo &applicationInfo): m_applicationInfo(applicationInfo) { + // Fill the application information + m_vkAppInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + m_vkAppInfo.pApplicationName = applicationInfo.title.c_str(); + m_vkAppInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); + m_vkAppInfo.pEngineName = "Conjure Engine"; + m_vkAppInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); + m_vkAppInfo.apiVersion = VK_API_VERSION_1_0; } int Application::Run() const { return 0; } diff --git a/ConjureEngine/src/ConjureEngine/Application.h b/ConjureEngine/src/ConjureEngine/Application.h index 0c2840b..eedec4f 100644 --- a/ConjureEngine/src/ConjureEngine/Application.h +++ b/ConjureEngine/src/ConjureEngine/Application.h @@ -9,7 +9,13 @@ namespace ConjureEngine { struct ApplicationInfo { - WindowInfo window{"", 0, 0, 0, 0}; + std::string title; + WindowInfo window{ + 0, + 0, + 0, + 0 + }; }; class Application { @@ -25,5 +31,6 @@ namespace ConjureEngine { public: protected: ApplicationInfo m_applicationInfo; + VkApplicationInfo m_vkAppInfo{}; }; } // ConjureEngine diff --git a/ConjureEngine/src/ConjureEngine/ConjureEngine.h b/ConjureEngine/src/ConjureEngine/ConjureEngine.h index af90929..4bc960e 100644 --- a/ConjureEngine/src/ConjureEngine/ConjureEngine.h +++ b/ConjureEngine/src/ConjureEngine/ConjureEngine.h @@ -1,4 +1,5 @@ #pragma once #include "Application.h" +#include "VulkanContext.h" #include "Window.h" diff --git a/ConjureEngine/src/ConjureEngine/PCH.h b/ConjureEngine/src/ConjureEngine/PCH.h index ef309e2..7748be7 100644 --- a/ConjureEngine/src/ConjureEngine/PCH.h +++ b/ConjureEngine/src/ConjureEngine/PCH.h @@ -19,10 +19,4 @@ // VULKAN #include "vulkan/vulkan.h" -#include "vulkan/vulkan_core.h" - -#ifdef __APPLE__ - #include "vulkan/vulkan_metal.h" -#elifdef __WINDOWS__ - #include "vulkan/vulkan_win32.h" -#endif \ No newline at end of file +#include "vulkan/vulkan_core.h" \ No newline at end of file diff --git a/ConjureEngine/src/ConjureEngine/VulkanContext.cpp b/ConjureEngine/src/ConjureEngine/VulkanContext.cpp index d287486..f577b15 100644 --- a/ConjureEngine/src/ConjureEngine/VulkanContext.cpp +++ b/ConjureEngine/src/ConjureEngine/VulkanContext.cpp @@ -4,6 +4,13 @@ #include "VulkanContext.h" +#ifdef __WIN32__ + // #include +#endif +#ifdef __APPLE__ + #include "vulkan/vulkan_metal.h" +#endif + namespace ConjureEngine { VulkanContext::VulkanContext(SDL_Window* window, const VkApplicationInfo& appInfo) { // LOAD THE EXTENSIONS @@ -110,6 +117,10 @@ namespace ConjureEngine { vulkanInfos.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; #endif + #ifdef __WIN32__ + this->m_extensionNames.push_back("VK_KHR_win32_surface"); + #endif + vulkanInfos.enabledExtensionCount = static_cast(this->m_extensionNames.size()); vulkanInfos.ppEnabledExtensionNames = this->m_extensionNames.data(); } diff --git a/ConjureEngine/src/ConjureEngine/Window.cpp b/ConjureEngine/src/ConjureEngine/Window.cpp index b2ac76e..63bf2fc 100644 --- a/ConjureEngine/src/ConjureEngine/Window.cpp +++ b/ConjureEngine/src/ConjureEngine/Window.cpp @@ -5,29 +5,16 @@ namespace ConjureEngine { - Window::Window(const WindowInfo& windowInfo) + Window::Window(const char* title, const WindowInfo& windowInfo) { // INIT WINDOW SDL_Init(SDL_INIT_VIDEO); SDL_Vulkan_LoadLibrary(nullptr); - m_window = SDL_CreateWindow(windowInfo.title.c_str(), 0, 0, windowInfo.width, windowInfo.height, SDL_WINDOW_SHOWN |SDL_WINDOW_VULKAN); - // Fill the application information - VkApplicationInfo appInfo{}; - appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; - appInfo.pApplicationName = windowInfo.title.c_str(); - appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); - appInfo.pEngineName = "Conjure Engine"; - appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); - appInfo.apiVersion = VK_API_VERSION_1_0; - - // INIT VULKAN - m_vulkanContext = new VulkanContext(m_window, appInfo); + m_window = SDL_CreateWindow(title, 0, 32, windowInfo.width, windowInfo.height, SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN); } Window::~Window() { - delete m_vulkanContext; - SDL_DestroyWindow(m_window); SDL_Vulkan_UnloadLibrary(); SDL_Quit(); @@ -35,13 +22,8 @@ namespace ConjureEngine { SDL_Log("Cleaned up with errors: %s", SDL_GetError()); } - const SDL_Window* Window::GetWindow() const + SDL_Window* Window::GetWindow() const { return m_window; } - - const VulkanContext * Window::GetVulkanContext() const - { - return m_vulkanContext; - } } // ConjureEngine \ No newline at end of file diff --git a/ConjureEngine/src/ConjureEngine/Window.h b/ConjureEngine/src/ConjureEngine/Window.h index 3d6d5b5..3856666 100644 --- a/ConjureEngine/src/ConjureEngine/Window.h +++ b/ConjureEngine/src/ConjureEngine/Window.h @@ -5,12 +5,10 @@ #pragma once #include "PCH.h" -#include "VulkanContext.h" namespace ConjureEngine { struct WindowInfo { - std::string title; int x; int y; int width; @@ -19,18 +17,14 @@ namespace ConjureEngine class Window { public: - explicit Window(const WindowInfo &windowInfo); + explicit Window(const char* title, const WindowInfo &windowInfo); ~Window(); - const SDL_Window *GetWindow() const; - - const VulkanContext *GetVulkanContext() const; - + SDL_Window* GetWindow() const; private: public: private: - SDL_Window *m_window; - VulkanContext *m_vulkanContext; + SDL_Window* m_window; }; } // ConjureEngine diff --git a/Demo1/src/Demo1.cpp b/Demo1/src/Demo1.cpp index b2db90d..2fdcca5 100644 --- a/Demo1/src/Demo1.cpp +++ b/Demo1/src/Demo1.cpp @@ -5,16 +5,15 @@ #include "Demo1.h" #include "ConjureEngine/ConjureEngine.h" -static ConjureEngine::ApplicationInfo appInfo = ConjureEngine::ApplicationInfo{ - { - ConjureEngine::WindowInfo{ - "Demo1", - 0, - 0, - 1920, - 1080 - } - } +static ConjureEngine::ApplicationInfo appInfo = ConjureEngine::ApplicationInfo +{ + "Demo1", + ConjureEngine::WindowInfo { + 0, + 0, + 1920, + 1080 + } }; namespace Demo1 { @@ -22,7 +21,10 @@ namespace Demo1 { int Demo1::Run() const { - ConjureEngine::Window window(m_applicationInfo.window); + ConjureEngine::Window window(appInfo.title.c_str(), m_applicationInfo.window); + + // INIT VULKAN + ConjureEngine::VulkanContext vulkanContext(window.GetWindow(), this->m_vkAppInfo); bool running = true; while (running) { diff --git a/Demo1/src/main.cpp b/Demo1/src/main.cpp index 247f446..33d1642 100644 --- a/Demo1/src/main.cpp +++ b/Demo1/src/main.cpp @@ -1,7 +1,11 @@ +#define SDL_MAIN_HANDLED + #include "Demo1.h" -int main(int argc, char* argv[]) +int main ( int argc, char* argv[] ) { + SDL_SetMainReady(); + const Demo1::Demo1 app; return app.Run();