From 3b047f6442bae505c308e42f859f7e44b597ce24 Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Fri, 23 May 2025 09:51:54 -0400 Subject: [PATCH] redo vulkan surfaces --- .../src/vulkan_surface/vulkan_surface.h | 4 +- .../src/vulkan_surface/vulkan_surface.mm | 2 +- .../src/vulkan_surface/vulkan_surfance.c | 58 +++++++++++++++++++ src/core/window_surface/gryphn_surface.h | 4 +- 4 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 rendering_api/vulkan/src/vulkan_surface/vulkan_surfance.c diff --git a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h index 2b297dc..2ef10d2 100644 --- a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h +++ b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h @@ -2,6 +2,6 @@ #include #include -struct gnPlatformWindowSurface { +typedef struct gnPlatformWindowSurface_t { VkSurfaceKHR surface; -}; +} gnPlatformWindowSurface; diff --git a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.mm b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.mm index 5134f81..c3f749f 100644 --- a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.mm +++ b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.mm @@ -1,3 +1,4 @@ +#ifdef GN_PLATFORM_MACOS #include "vulkan_surface.h" #include "../instance/vulkan_instance.h" #include @@ -8,7 +9,6 @@ #import -#ifdef GN_PLATFORM_MACOS #include "vulkan/vulkan_metal.h" GN_EXPORT gnReturnCode gnCreateMacOSWindowSurfaceFn(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnMacOSWindowSurfaceInfo_t createInfo) { NSWindow* window = (__bridge NSWindow*)createInfo.window; diff --git a/rendering_api/vulkan/src/vulkan_surface/vulkan_surfance.c b/rendering_api/vulkan/src/vulkan_surface/vulkan_surfance.c new file mode 100644 index 0000000..a4b66a6 --- /dev/null +++ b/rendering_api/vulkan/src/vulkan_surface/vulkan_surfance.c @@ -0,0 +1,58 @@ +#include +#include "vulkan_surface.h" + +#ifdef GN_PLATFORM_LINUX +#ifdef GN_WINDOW_X11 +#include +#include +gnReturnCode gnCreateX11WindowSurfaceFn(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnX11WindowSurfaceInfo_t createInfo) { + windowSurface->windowSurface = malloc(sizeof(struct gnPlatformWindowSurface_t)); + VkXlibSurfaceCreateInfoKHR info = {}; + info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; + info.dpy = createInfo.display; + info.window = createInfo.window; + + VkResult result = vkCreateXlibSurfaceKHR(instance->instance->vk_instance, &info, NULL, &windowSurface->windowSurface->surface); + if (result != VK_SUCCESS) + return GN_FAILED_TO_ATTACH_WINDOW; + return GN_SUCCESS; +} +#endif + +#ifdef GN_WINFDOW_WAYLAND +#include +gnReturnCode gnCreateWaylandWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWaylandWindowSurfaceInfo_t createInfo) { + windowSurface->windowSurface = malloc(sizeof(struct gnPlatformWindowSurface_t)); + VkWaylandSurfaceCreateInfoKHR info = {}; + info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; + info.display = createInfo.display; + info.surface = createInfo.surface; + + VkResult result = vkCreateWaylandSurfaceKHR(instance->instance->vk_instance, &info, NULL, &windowSurface->windowSurface->surface); + if (result != VK_SUCCESS) + return GN_FAILED_TO_ATTACH_WINDOW; + return GN_SUCCESS; +} +#endif +#endif + +#ifdef GN_PLATFORM_WINDOWS +#include "vulkan/vulkan_win32.h" +gnReturnCode gnCreateWin32WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWin32WindowSurfaceInfo_t createInfo) { + windowSurface->windowSurface = malloc(sizeof(struct gnPlatformWindowSurface_t)); + VkWin32SurfaceCreateInfoKHR info = {}; + info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; + info.hwnd = createInfo.window; + info.hinstance = createInfo.instance; + + VkResult result = vkCreateWin32SurfaceKHR(instance->instance->vk_instance, &info, NULL, &windowSurface->windowSurface->surface); + if (result != VK_SUCCESS) + return GN_FAILED_TO_ATTACH_WINDOW; + return GN_SUCCESS; +} +#endif + + +void gnDestroyWindowSurfaceFn(struct gnWindowSurface_t* windowSurface) { + vkDestroySurfaceKHR(windowSurface->instance->instance->vk_instance, windowSurface->windowSurface->surface, NULL); +} diff --git a/src/core/window_surface/gryphn_surface.h b/src/core/window_surface/gryphn_surface.h index 7919325..229caae 100644 --- a/src/core/window_surface/gryphn_surface.h +++ b/src/core/window_surface/gryphn_surface.h @@ -2,10 +2,10 @@ #include #include -struct gnPlatformWindowSurface; +struct gnPlatformWindowSurface_t; typedef struct gnWindowSurface_t { - struct gnPlatformWindowSurface* windowSurface; + struct gnPlatformWindowSurface_t* windowSurface; gnInstance* instance; } gnWindowSurface; void gnDestroyWindowSurface(struct gnWindowSurface_t* windowSurface);