CONGE-2 working window on windows. Need to test on mac

This commit is contained in:
Jimmy Tremblay-Bernier 2024-11-22 14:29:54 -05:00
parent b253c08bf8
commit 11b558f836
10 changed files with 57 additions and 50 deletions

View File

@ -21,6 +21,11 @@ find_package(glm REQUIRED)
find_package(SDL2 REQUIRED) find_package(SDL2 REQUIRED)
find_package(Vulkan 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}) add_library(${PROJECT_NAME} STATIC ${HEADER_FILES} ${SOURCES_FILES})
# Specify include directories # Specify include directories

View File

@ -6,6 +6,13 @@
namespace ConjureEngine { namespace ConjureEngine {
Application::Application(const ApplicationInfo &applicationInfo): m_applicationInfo(applicationInfo) { 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; } int Application::Run() const { return 0; }

View File

@ -9,7 +9,13 @@
namespace ConjureEngine { namespace ConjureEngine {
struct ApplicationInfo { struct ApplicationInfo {
WindowInfo window{"", 0, 0, 0, 0}; std::string title;
WindowInfo window{
0,
0,
0,
0
};
}; };
class Application { class Application {
@ -25,5 +31,6 @@ namespace ConjureEngine {
public: public:
protected: protected:
ApplicationInfo m_applicationInfo; ApplicationInfo m_applicationInfo;
VkApplicationInfo m_vkAppInfo{};
}; };
} // ConjureEngine } // ConjureEngine

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "Application.h" #include "Application.h"
#include "VulkanContext.h"
#include "Window.h" #include "Window.h"

View File

@ -20,9 +20,3 @@
// VULKAN // VULKAN
#include "vulkan/vulkan.h" #include "vulkan/vulkan.h"
#include "vulkan/vulkan_core.h" #include "vulkan/vulkan_core.h"
#ifdef __APPLE__
#include "vulkan/vulkan_metal.h"
#elifdef __WINDOWS__
#include "vulkan/vulkan_win32.h"
#endif

View File

@ -4,6 +4,13 @@
#include "VulkanContext.h" #include "VulkanContext.h"
#ifdef __WIN32__
// #include <vulkan/vulkan_win32.h>
#endif
#ifdef __APPLE__
#include "vulkan/vulkan_metal.h"
#endif
namespace ConjureEngine { namespace ConjureEngine {
VulkanContext::VulkanContext(SDL_Window* window, const VkApplicationInfo& appInfo) { VulkanContext::VulkanContext(SDL_Window* window, const VkApplicationInfo& appInfo) {
// LOAD THE EXTENSIONS // LOAD THE EXTENSIONS
@ -110,6 +117,10 @@ namespace ConjureEngine {
vulkanInfos.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; vulkanInfos.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
#endif #endif
#ifdef __WIN32__
this->m_extensionNames.push_back("VK_KHR_win32_surface");
#endif
vulkanInfos.enabledExtensionCount = static_cast<uint32_t>(this->m_extensionNames.size()); vulkanInfos.enabledExtensionCount = static_cast<uint32_t>(this->m_extensionNames.size());
vulkanInfos.ppEnabledExtensionNames = this->m_extensionNames.data(); vulkanInfos.ppEnabledExtensionNames = this->m_extensionNames.data();
} }

View File

@ -5,29 +5,16 @@
namespace ConjureEngine { namespace ConjureEngine {
Window::Window(const WindowInfo& windowInfo) Window::Window(const char* title, const WindowInfo& windowInfo)
{ {
// INIT WINDOW // INIT WINDOW
SDL_Init(SDL_INIT_VIDEO); SDL_Init(SDL_INIT_VIDEO);
SDL_Vulkan_LoadLibrary(nullptr); 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 m_window = SDL_CreateWindow(title, 0, 32, windowInfo.width, windowInfo.height, SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN);
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);
} }
Window::~Window() { Window::~Window() {
delete m_vulkanContext;
SDL_DestroyWindow(m_window); SDL_DestroyWindow(m_window);
SDL_Vulkan_UnloadLibrary(); SDL_Vulkan_UnloadLibrary();
SDL_Quit(); SDL_Quit();
@ -35,13 +22,8 @@ namespace ConjureEngine {
SDL_Log("Cleaned up with errors: %s", SDL_GetError()); SDL_Log("Cleaned up with errors: %s", SDL_GetError());
} }
const SDL_Window* Window::GetWindow() const SDL_Window* Window::GetWindow() const
{ {
return m_window; return m_window;
} }
const VulkanContext * Window::GetVulkanContext() const
{
return m_vulkanContext;
}
} // ConjureEngine } // ConjureEngine

View File

@ -5,12 +5,10 @@
#pragma once #pragma once
#include "PCH.h" #include "PCH.h"
#include "VulkanContext.h"
namespace ConjureEngine namespace ConjureEngine
{ {
struct WindowInfo { struct WindowInfo {
std::string title;
int x; int x;
int y; int y;
int width; int width;
@ -19,18 +17,14 @@ namespace ConjureEngine
class Window { class Window {
public: public:
explicit Window(const WindowInfo &windowInfo); explicit Window(const char* title, const WindowInfo &windowInfo);
~Window(); ~Window();
const SDL_Window *GetWindow() const; SDL_Window* GetWindow() const;
const VulkanContext *GetVulkanContext() const;
private: private:
public: public:
private: private:
SDL_Window *m_window; SDL_Window* m_window;
VulkanContext *m_vulkanContext;
}; };
} // ConjureEngine } // ConjureEngine

View File

@ -5,16 +5,15 @@
#include "Demo1.h" #include "Demo1.h"
#include "ConjureEngine/ConjureEngine.h" #include "ConjureEngine/ConjureEngine.h"
static ConjureEngine::ApplicationInfo appInfo = ConjureEngine::ApplicationInfo{ static ConjureEngine::ApplicationInfo appInfo = ConjureEngine::ApplicationInfo
{ {
ConjureEngine::WindowInfo{ "Demo1",
"Demo1", ConjureEngine::WindowInfo {
0, 0,
0, 0,
1920, 1920,
1080 1080
} }
}
}; };
namespace Demo1 { namespace Demo1 {
@ -22,7 +21,10 @@ namespace Demo1 {
int Demo1::Run() const { 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; bool running = true;
while (running) { while (running) {

View File

@ -1,7 +1,11 @@
#define SDL_MAIN_HANDLED
#include "Demo1.h" #include "Demo1.h"
int main(int argc, char* argv[]) int main ( int argc, char* argv[] )
{ {
SDL_SetMainReady();
const Demo1::Demo1 app; const Demo1::Demo1 app;
return app.Run(); return app.Run();