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(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

View File

@ -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; }

View File

@ -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

View File

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

View File

@ -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
#include "vulkan/vulkan_core.h"

View File

@ -4,6 +4,13 @@
#include "VulkanContext.h"
#ifdef __WIN32__
// #include <vulkan/vulkan_win32.h>
#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<uint32_t>(this->m_extensionNames.size());
vulkanInfos.ppEnabledExtensionNames = this->m_extensionNames.data();
}

View File

@ -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

View File

@ -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

View File

@ -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) {

View File

@ -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();