From 4792f3ffde76faca57da8541253bd68ae62f7fb3 Mon Sep 17 00:00:00 2001 From: Warwick Date: Wed, 6 Dec 2023 13:35:15 +0000 Subject: [PATCH] BROKEN trying to set up surface current issues is GLFW window pointer is null --- src/application.cpp | 2 ++ src/yave_vulkan_instance.hpp | 1 + src/yave_vulkan_surface.cpp | 17 +++++++++++++++++ src/yave_vulkan_surface.hpp | 31 +++++++++++++++++++++++++++++++ src/yave_window.hpp | 4 +++- toolchain.cmake | 4 ++-- 6 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 src/yave_vulkan_surface.cpp create mode 100644 src/yave_vulkan_surface.hpp diff --git a/src/application.cpp b/src/application.cpp index eea182d..0dca228 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -1,10 +1,12 @@ #include "application.hpp" #include "yave_vulkan_instance.hpp" +#include "yave_vulkan_surface.hpp" namespace yave { void Application::run() { YaveVulkanInstance VI = YaveVulkanInstance(); + YaveVulkanSurface VS = YaveVulkanSurface(VI, yaveWindow); while (!yaveWindow.shouldClose()) { glfwPollEvents(); diff --git a/src/yave_vulkan_instance.hpp b/src/yave_vulkan_instance.hpp index d945099..8dd5d8b 100644 --- a/src/yave_vulkan_instance.hpp +++ b/src/yave_vulkan_instance.hpp @@ -49,6 +49,7 @@ public: YaveVulkanInstance(const YaveVulkanInstance &) = delete; YaveVulkanInstance &operator=(const YaveVulkanInstance &) = delete; + VkInstance *getVkInstance(){return &instance;} YaveVulkanInstance(); ~YaveVulkanInstance(); }; diff --git a/src/yave_vulkan_surface.cpp b/src/yave_vulkan_surface.cpp new file mode 100644 index 0000000..7e0dcb1 --- /dev/null +++ b/src/yave_vulkan_surface.cpp @@ -0,0 +1,17 @@ +#include "yave_vulkan_surface.hpp" +#include "yave_vulkan_instance.hpp" + +namespace yave { +YaveVulkanSurface::YaveVulkanSurface(YaveVulkanInstance &yaveVulkanInstance, + YaveWindow &window) { + VkWaylandSurfaceCreateInfoKHR createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; + createInfo.display = glfwGetWaylandDisplay(); + createInfo.surface = glfwGetWaylandWindow(window.getGLFWWindow()); + //VkInstance *vkInstance = yaveVulkanInstance.getVkInstance(); + if (vkCreateWaylandSurfaceKHR((*yaveVulkanInstance.getVkInstance()), &createInfo, nullptr, &surface)) { + throw std::runtime_error("failed to create window surface!"); + } +} +YaveVulkanSurface::~YaveVulkanSurface() {} +} // namespace yave diff --git a/src/yave_vulkan_surface.hpp b/src/yave_vulkan_surface.hpp new file mode 100644 index 0000000..5dcb70c --- /dev/null +++ b/src/yave_vulkan_surface.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "yave_vulkan_instance.hpp" +#include "yave_window.hpp" +#include +#include + +// This engine is for now Wayland only!!! +#define VK_USE_PLATFORM_WAYLAND_KHR +#include +#define GLFW_INCLUDE_VULKAN +#include +#define GLFW_EXPOSE_NATIVE_WAYLAND +#include + +namespace yave { + +class YaveVulkanSurface { + +private: + VkSurfaceKHR surface; + +public: + YaveVulkanSurface(YaveVulkanInstance &yaveVulkanInstance, YaveWindow &window); + ~YaveVulkanSurface(); + // Delete Copy constructors + // This class should match one to one with vulkan instances + YaveVulkanSurface(const YaveVulkanSurface &) = delete; + YaveVulkanSurface &operator=(const YaveVulkanSurface &) = delete; +}; +} // namespace yave diff --git a/src/yave_window.hpp b/src/yave_window.hpp index f9357b9..0ec6e18 100644 --- a/src/yave_window.hpp +++ b/src/yave_window.hpp @@ -18,7 +18,7 @@ private: std::string windowName; public: - // Delete Copy constructors + // Delete Copy constructors // This class should match one to one with glfw window instances YaveWindow(const YaveWindow &) = delete; YaveWindow &operator=(const YaveWindow &) = delete; @@ -27,6 +27,8 @@ public: YaveWindow(int w, int h, std::string name); ~YaveWindow(); + GLFWwindow *getGLFWWindow() { return window; } + // Tell apllicaton that the user has attempted to close the window bool shouldClose() { return glfwWindowShouldClose(window); } }; diff --git a/toolchain.cmake b/toolchain.cmake index c3b1e15..b851eeb 100644 --- a/toolchain.cmake +++ b/toolchain.cmake @@ -1,13 +1,13 @@ # CMake toolchain file # linker flags -set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--strip-debug") +#set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--strip-debug") # cflags set(CMAKE_CXX_FLAGS_INIT "-ansi -Wall") # cflags for debug build -set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g3 -ggdb3") +set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g -ggdb") # cflags for release build set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG -s")