From 339b2c75e0b1c7acf546c33368eb37984209d5c1 Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Sat, 24 May 2025 18:41:13 -0400 Subject: [PATCH] get image count and preferred surface format --- include/gryphn/gryphn.h | 1 + .../vulkan_presentation_queue.c | 24 +++++- .../{vulkan_surfance.c => vulkan_surface.c} | 38 +++++++-- .../src/vulkan_surface/vulkan_surface.h | 3 + .../src/vulkan_surface/vulkan_surface.m | 1 + src/core/gryphn_platform_functions.h | 3 +- src/core/instance/init/gryphn_init.c | 2 +- .../gryphn_presentation_queue.h | 6 +- src/core/window_surface/gryphn_surface.c | 79 ++++++++++++------- src/core/window_surface/gryphn_surface.h | 59 ++++++-------- .../gryphn_surface_create_functions.c | 30 +++++++ .../gryphn_surface_create_functions.h | 39 +++++++++ src/utils/gryphn_error_code.h | 4 +- src/utils/math/gryphn_vec2.h | 6 +- src/utils/types/gryphn_image_format.h | 1 + 15 files changed, 214 insertions(+), 82 deletions(-) rename rendering_api/vulkan/src/vulkan_surface/{vulkan_surfance.c => vulkan_surface.c} (73%) create mode 100644 src/core/window_surface/gryphn_surface_create_functions.c create mode 100644 src/core/window_surface/gryphn_surface_create_functions.h diff --git a/include/gryphn/gryphn.h b/include/gryphn/gryphn.h index e8e581f..3f9e57d 100644 --- a/include/gryphn/gryphn.h +++ b/include/gryphn/gryphn.h @@ -6,6 +6,7 @@ #include #include #include +#include #include // #pragma once diff --git a/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c b/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c index bad4452..5f04620 100644 --- a/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c +++ b/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c @@ -6,7 +6,6 @@ gnReturnCode gnCreatePresentationQueueFn(gnPresentationQueue* presentationQueue, const gnOutputDevice* device, struct gnPresentationQueueInfo_t presentationInfo) { vkSwapchainSupportDetails details = vkGetSwapchainSupport(device->physicalDevice.physicalDevice->device, presentationInfo.surface.windowSurface->surface); - if (details.formatCount == 0) { gnDebuggerSetErrorMessage(device->instance->debugger, (gnMessageData){ @@ -15,7 +14,6 @@ gnReturnCode gnCreatePresentationQueueFn(gnPresentationQueue* presentationQueue, ); return GN_NO_SUPPORTED_FORMATS; } - if (details.presentModeCount == 0) { gnDebuggerSetErrorMessage(device->instance->debugger, (gnMessageData){ @@ -25,6 +23,28 @@ gnReturnCode gnCreatePresentationQueueFn(gnPresentationQueue* presentationQueue, return GN_NO_SUPPORTED_PRESENT_MODES; } + int index = -1; + VkFormat convertedFormat = vkGryphnFormatToVulkanFormat(presentationInfo.format.format); + VkColorSpaceKHR convertedColorSpace = vkGryphnColorSpaceToVulkanColorSpace(presentationInfo.format.colorSpace); + for (int i = 0; i < details.formatCount; i++) { + if (details.formats[i].format == convertedFormat && details.formats[i].colorSpace == convertedColorSpace) { + index = i; + break; + } + } + + if (index == -1) { + gnDebuggerSetErrorMessage(device->instance->debugger, (gnMessageData){ + .message = gnCreateString("Unsupported color format passed to Gryphn") + }); + return GN_UNKNOWN_IMAGE_FORMAT; + } + VkPresentModeKHR presentMode = VK_PRESENT_MODE_FIFO_KHR; + VkExtent2D extent = { + .width = presentationInfo.ImageSize.x, + .height = presentationInfo.ImageSize.y + }; + return GN_SUCCESS; } diff --git a/rendering_api/vulkan/src/vulkan_surface/vulkan_surfance.c b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.c similarity index 73% rename from rendering_api/vulkan/src/vulkan_surface/vulkan_surfance.c rename to rendering_api/vulkan/src/vulkan_surface/vulkan_surface.c index d292bb9..4b38155 100644 --- a/rendering_api/vulkan/src/vulkan_surface/vulkan_surfance.c +++ b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.c @@ -59,11 +59,8 @@ void gnDestroyWindowSurfaceFn(struct gnWindowSurface_t* windowSurface) { vkDestroySurfaceKHR(windowSurface->instance->instance->vk_instance, windowSurface->windowSurface->surface, NULL); } - -struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormatsFn( - struct gnWindowSurface_t* windowSurface, - struct gnPhysicalDevice_t device, - uint32_t* formatCount +struct gnSurfaceFormat_t* vkGetSurfaceFormats( + struct gnWindowSurface_t* windowSurface, struct gnPhysicalDevice_t device, uint32_t* formatCount ) { struct gnSurfaceFormat_t* formats = NULL; @@ -88,3 +85,34 @@ struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormatsFn( return formats; } + +struct gnSurfaceDetails_t gnGetSurfaceDetailsFn( + // struct gnWindowSurface_t* windowSurface, + // struct gnPhysicalDevice_t device, + // uint32_t* formatCount + struct gnWindowSurface_t* windowSurface, struct gnPhysicalDevice_t device +) { + struct gnSurfaceDetails_t surfaceDetails; + surfaceDetails.formats = vkGetSurfaceFormats(windowSurface, device, &surfaceDetails.formatCount); + + VkSurfaceCapabilitiesKHR details; + vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.physicalDevice->device, windowSurface->windowSurface->surface, &details); + + surfaceDetails.minImageCount = details.minImageCount; + surfaceDetails.maxImageCount = details.maxImageCount; + + return surfaceDetails; +} + + +VkFormat vkGryphnFormatToVulkanFormat(gnImageFormat format) { + switch (format) { + case GN_FORMAT_BGRA8_SRGB: { return VK_FORMAT_B8G8R8A8_SRGB; } + default: return VK_FORMAT_UNDEFINED; + } +} +VkColorSpaceKHR vkGryphnColorSpaceToVulkanColorSpace(gnColorSpace colorSpace) { + switch (colorSpace) { + case GN_COLOR_SPACE_SRGB_NONLINEAR: { return VK_COLOR_SPACE_SRGB_NONLINEAR_KHR; } + } +} diff --git a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h index 2ef10d2..66b81c5 100644 --- a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h +++ b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.h @@ -5,3 +5,6 @@ typedef struct gnPlatformWindowSurface_t { VkSurfaceKHR surface; } gnPlatformWindowSurface; + +VkFormat vkGryphnFormatToVulkanFormat(gnImageFormat format); +VkColorSpaceKHR vkGryphnColorSpaceToVulkanColorSpace(gnColorSpace colorSpace); diff --git a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.m b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.m index 8a22e6f..b75c3bf 100644 --- a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.m +++ b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.m @@ -1,5 +1,6 @@ #ifdef GN_PLATFORM_MACOS #include "vulkan_surface.h" +#include "core/window_surface/gryphn_surface_create_functions.h" #include "../instance/vulkan_instance.h" #include #include diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index d5f1852..f1ba209 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -6,6 +6,7 @@ #include "output_device/gryphn_physical_output_device.h" #include "output_device/gryphn_output_device.h" #include "window_surface/gryphn_surface.h" +#include "window_surface/gryphn_surface_create_functions.h" typedef struct gnFunctions_t { gnReturnCode (*_gnCreateInstance)(gnInstance* instance, struct gnInstanceInfo_t info); @@ -42,7 +43,7 @@ typedef struct gnFunctions_t { #endif void (*_gnDestroyWindowSurface)(struct gnWindowSurface_t* windowSurface); - struct gnSurfaceFormat_t* (*_gnGetSupportedSurfaceFormats)(struct gnWindowSurface_t* windowSurface, struct gnPhysicalDevice_t device, uint32_t* formatCount); + struct gnSurfaceDetails_t (*_gnGetSurfaceDetails)(struct gnWindowSurface_t* windowSurface, struct gnPhysicalDevice_t device); } gnFunctions; #include "core/presentation_queue/gryphn_presentation_queue.h" diff --git a/src/core/instance/init/gryphn_init.c b/src/core/instance/init/gryphn_init.c index 1fa86ca..d10e932 100644 --- a/src/core/instance/init/gryphn_init.c +++ b/src/core/instance/init/gryphn_init.c @@ -65,7 +65,7 @@ void gnLoadFunctions(struct gnDynamicLibrary_t* lib, struct gnFunctions_t* funct #endif gnLoadDLLFunction(lib, functions->_gnDestroyWindowSurface, "gnDestroyWindowSurfaceFn"); - gnLoadDLLFunction(lib, functions->_gnGetSupportedSurfaceFormats, "gnGetSupportedSurfaceFormatsFn"); + gnLoadDLLFunction(lib, functions->_gnGetSurfaceDetails, "gnGetSurfaceDetailsFn"); } void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFunctions_t* functions) { diff --git a/src/core/presentation_queue/gryphn_presentation_queue.h b/src/core/presentation_queue/gryphn_presentation_queue.h index f7a15eb..702b0bf 100644 --- a/src/core/presentation_queue/gryphn_presentation_queue.h +++ b/src/core/presentation_queue/gryphn_presentation_queue.h @@ -1,12 +1,12 @@ #pragma once #include -#include "core/output_device/gryphn_output_device.h" +#include #include #include typedef struct gnPresentationQueueInfo_t { - gnUInt ImageCount; - gnUInt2 ImageSize; + uint32_t ImageCount; + struct gnUInt2_t ImageSize; struct gnWindowSurface_t surface; struct gnSurfaceFormat_t format; } gnPresentationQueueInfo; diff --git a/src/core/window_surface/gryphn_surface.c b/src/core/window_surface/gryphn_surface.c index 2cf1904..dd9cb77 100644 --- a/src/core/window_surface/gryphn_surface.c +++ b/src/core/window_surface/gryphn_surface.c @@ -1,34 +1,6 @@ - #include "gryphn_surface.h" #include "core/gryphn_platform_functions.h" -#ifdef GN_PLATFORM_LINUX - #ifdef GN_WINDOW_X11 - gnReturnCode gnCreateX11WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnX11WindowSurfaceInfo_t createInfo) { - return instance->functions->_gnCreateX11WindowSurface(windowSurface, instance, createInfo); - } - #endif - #ifdef GN_WINDOW_WAYLAND - gnReturnCode gnCreateWaylandWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWaylandWindowSurfaceInfo_t createInfo) { - return instance->functions->_gnCreateWaylandWindowSurface(windowSurface, instance, createInfo); - } - #endif -#endif - - -#ifdef GN_PLATFORM_WIN32 - gnReturnCode gnCreateWin32WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWin32WindowSurfaceInfo_t createInfo) { - return instance->functions->_gnCreateWin32WindowSurface(windowSurface, instance, createInfo); - } -#endif - -#ifdef GN_PLATFORM_MACOS - gnReturnCode gnCreateMacOSWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnMacOSWindowSurfaceInfo_t createInfo) { - windowSurface->instance = instance; - return instance->functions->_gnCreateMacOSWindowSurface(windowSurface, instance, createInfo); - } -#endif - void gnDestroyWindowSurface(struct gnWindowSurface_t *windowSurface) { windowSurface->instance->functions->_gnDestroyWindowSurface(windowSurface); } @@ -38,5 +10,54 @@ struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormats( struct gnPhysicalDevice_t device, uint32_t* formatCount ) { - return windowSurface->instance->functions->_gnGetSupportedSurfaceFormats(windowSurface, device, formatCount); + struct gnSurfaceDetails_t surfaceDetails = windowSurface->instance->functions->_gnGetSurfaceDetails(windowSurface, device); + *formatCount = surfaceDetails.formatCount; + return surfaceDetails.formats; +} + +gnBool gnIsSurfaceFormatSupported( + struct gnWindowSurface_t* windowSurface, + struct gnPhysicalDevice_t device, + struct gnSurfaceFormat_t format +) { + uint32_t formatCount = 0; + gnSurfaceFormat* formats = gnGetSupportedSurfaceFormats(windowSurface, device, &formatCount); + for (int i = 0; i < formatCount; i++) { + if (formats[i].format == format.format && formats[i].colorSpace == format.colorSpace) { + return gnTrue; + } + } + return gnFalse; +} + +struct gnSurfaceFormat_t gnGetPreferredSurfaceFormat( + struct gnWindowSurface_t* windowSurface, + struct gnPhysicalDevice_t device, + struct gnSurfaceFormat_t format +) { + uint32_t formatCount = 0; + gnSurfaceFormat* formats = gnGetSupportedSurfaceFormats(windowSurface, device, &formatCount); + for (int i = 0; i < formatCount; i++) { + if (formats[i].format == format.format && formats[i].colorSpace == format.colorSpace) { + return formats[i]; + } + } + + // will attempt to give you a simmilar format that either matches the Image format and the Color space + for (int i = 0; i < formatCount; i++) { + if (formats[i].format == format.format || formats[i].colorSpace == format.colorSpace) { + return formats[i]; + } + } + + return formats[0]; +} + +int gnGetMinImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device) { + struct gnSurfaceDetails_t surfaceDetails = surface.instance->functions->_gnGetSurfaceDetails(&surface, device); + return surfaceDetails.minImageCount; +} +int gnGetMaxImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device) { + struct gnSurfaceDetails_t surfaceDetails = surface.instance->functions->_gnGetSurfaceDetails(&surface, device); + return surfaceDetails.maxImageCount; } diff --git a/src/core/window_surface/gryphn_surface.h b/src/core/window_surface/gryphn_surface.h index b490eb9..695f9df 100644 --- a/src/core/window_surface/gryphn_surface.h +++ b/src/core/window_surface/gryphn_surface.h @@ -11,6 +11,13 @@ typedef struct gnSurfaceFormat_t { gnColorSpace colorSpace; } gnSurfaceFormat; +typedef struct gnSurfaceDetails_t { + uint32_t formatCount; + struct gnSurfaceFormat_t* formats; + + int minImageCount, maxImageCount; +} gnSufaceDetails; + typedef struct gnWindowSurface_t { struct gnPlatformWindowSurface_t* windowSurface; gnInstance* instance; @@ -21,40 +28,18 @@ struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormats( struct gnPhysicalDevice_t device, uint32_t* formatCount ); - -#ifdef GN_PLATFORM_LINUX - #ifdef GN_WINDOW_X11 - typedef struct gnX11WindowSurfaceInfo_t { - Display* display; - Window* window; - } gnX11WindowSurfaceCreateInfo; - - gnReturnCode gnCreateX11WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnX11WindowSurfaceInfo_t createInfo); - #endif - #ifdef GN_WINDOW_WAYLAND - typedef struct gnWaylandWindowSurfaceInfo_t { - wl_display* display; - wl_surface* surface; - } gnWaylandWindowSurfaceInfo; - - gnReturnCode gnCreateWaylandWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWaylandWindowSurfaceInfo_t createInfo); - #endif -#endif - - -#ifdef GN_PLATFORM_WIN32 - typedef struct gnWin32WindowSurfaceInfo_t { - HWND* window; - HINSTANCE* instance; - } gnWin32WindowSurfaceInfo; - - gnReturnCode gnCreateWin32WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWin32WindowSurfaceInfo_t createInfo); -#endif - -#ifdef GN_PLATFORM_MACOS - typedef struct gnMacOSWindowSurfaceInfo_t { - NSWindow* window; - } gnMacOSWindowSurfaceInfo; - - gnReturnCode gnCreateMacOSWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnMacOSWindowSurfaceInfo_t createInfo); -#endif +gnBool gnIsSurfaceFormatSupported( + struct gnWindowSurface_t* windowSurface, + struct gnPhysicalDevice_t device, + struct gnSurfaceFormat_t format +); +// this function will give you you're preferred surface format +// unless its not supported then it will give you the first supported surface format +// at some point this function will attempt to give you the most simmilar surface format +struct gnSurfaceFormat_t gnGetPreferredSurfaceFormat( + struct gnWindowSurface_t* windowSurface, + struct gnPhysicalDevice_t device, + struct gnSurfaceFormat_t format +); +int gnGetMinImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device); +int gnGetMaxImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device); diff --git a/src/core/window_surface/gryphn_surface_create_functions.c b/src/core/window_surface/gryphn_surface_create_functions.c new file mode 100644 index 0000000..3ce6176 --- /dev/null +++ b/src/core/window_surface/gryphn_surface_create_functions.c @@ -0,0 +1,30 @@ +#include "gryphn_surface_create_functions.h" +#include "core/instance/gryphn_instance.h" +#include "core/gryphn_platform_functions.h" + +#ifdef GN_PLATFORM_LINUX + #ifdef GN_WINDOW_X11 + gnReturnCode gnCreateX11WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnX11WindowSurfaceInfo_t createInfo) { + return instance->functions->_gnCreateX11WindowSurface(windowSurface, instance, createInfo); + } + #endif + #ifdef GN_WINDOW_WAYLAND + gnReturnCode gnCreateWaylandWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWaylandWindowSurfaceInfo_t createInfo) { + return instance->functions->_gnCreateWaylandWindowSurface(windowSurface, instance, createInfo); + } + #endif +#endif + + +#ifdef GN_PLATFORM_WIN32 + gnReturnCode gnCreateWin32WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWin32WindowSurfaceInfo_t createInfo) { + return instance->functions->_gnCreateWin32WindowSurface(windowSurface, instance, createInfo); + } +#endif + +#ifdef GN_PLATFORM_MACOS + gnReturnCode gnCreateMacOSWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnMacOSWindowSurfaceInfo_t createInfo) { + windowSurface->instance = instance; + return instance->functions->_gnCreateMacOSWindowSurface(windowSurface, instance, createInfo); + } +#endif diff --git a/src/core/window_surface/gryphn_surface_create_functions.h b/src/core/window_surface/gryphn_surface_create_functions.h new file mode 100644 index 0000000..64bcddd --- /dev/null +++ b/src/core/window_surface/gryphn_surface_create_functions.h @@ -0,0 +1,39 @@ +#pragma once +#include "gryphn_surface.h" + +#ifdef GN_PLATFORM_LINUX + #ifdef GN_WINDOW_X11 + typedef struct gnX11WindowSurfaceInfo_t { + Display* display; + Window* window; + } gnX11WindowSurfaceCreateInfo; + + gnReturnCode gnCreateX11WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnX11WindowSurfaceInfo_t createInfo); + #endif + #ifdef GN_WINDOW_WAYLAND + typedef struct gnWaylandWindowSurfaceInfo_t { + wl_display* display; + wl_surface* surface; + } gnWaylandWindowSurfaceInfo; + + gnReturnCode gnCreateWaylandWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWaylandWindowSurfaceInfo_t createInfo); + #endif +#endif + + +#ifdef GN_PLATFORM_WIN32 + typedef struct gnWin32WindowSurfaceInfo_t { + HWND* window; + HINSTANCE* instance; + } gnWin32WindowSurfaceInfo; + + gnReturnCode gnCreateWin32WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnWin32WindowSurfaceInfo_t createInfo); +#endif + +#ifdef GN_PLATFORM_MACOS + typedef struct gnMacOSWindowSurfaceInfo_t { + NSWindow* window; + } gnMacOSWindowSurfaceInfo; + + gnReturnCode gnCreateMacOSWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstance* instance, struct gnMacOSWindowSurfaceInfo_t createInfo); +#endif diff --git a/src/utils/gryphn_error_code.h b/src/utils/gryphn_error_code.h index ac91496..0b7a6f1 100644 --- a/src/utils/gryphn_error_code.h +++ b/src/utils/gryphn_error_code.h @@ -12,7 +12,8 @@ typedef enum gnReturnCode_t { GN_INVALID_INSTANCE, GN_DEBUGGER_EXISTS, GN_NO_SUPPORTED_FORMATS, - GN_NO_SUPPORTED_PRESENT_MODES + GN_NO_SUPPORTED_PRESENT_MODES, + GN_UNKNOWN_IMAGE_FORMAT // GN_UNKNOWN_ERROR, // GN_UNKNOWN_FRAMEBUFFER_ATTACHMENT, @@ -45,5 +46,6 @@ static const char* gnErrorCodeToCString(enum gnReturnCode_t returnCode) { case GN_DEBUGGER_EXISTS: return "GN_DEBUGGER_EXISTS"; case GN_NO_SUPPORTED_FORMATS: return "GN_NO_SUPPORTED_FORMATS"; case GN_NO_SUPPORTED_PRESENT_MODES: return "GN_NO_SUPPORTED_PRESENT_MODES"; + case GN_UNKNOWN_IMAGE_FORMAT: return "GN_UNKNOWN_IMAGE_FORMAT"; } } diff --git a/src/utils/math/gryphn_vec2.h b/src/utils/math/gryphn_vec2.h index c3c8541..1bfd387 100644 --- a/src/utils/math/gryphn_vec2.h +++ b/src/utils/math/gryphn_vec2.h @@ -1,7 +1,7 @@ #pragma once #include "stdint.h" -typedef struct gnVec2 { +typedef struct gnVec2_t { union { struct { float a, b; }; struct { float x, y; }; @@ -28,7 +28,7 @@ typedef struct gnVec2 { typedef gnVec2 gnFVec2; typedef gnVec2 gnFloat2; -typedef struct gnUInt2 { +typedef struct gnUInt2_t { union { struct { uint32_t a, b; }; struct { uint32_t x, y; }; @@ -52,7 +52,7 @@ typedef struct gnUInt2 { #endif } gnUInt2; -typedef struct gnInt2 { +typedef struct gnInt2_t { union { struct { int a, b; }; struct { int x, y; }; diff --git a/src/utils/types/gryphn_image_format.h b/src/utils/types/gryphn_image_format.h index 8e33e96..dc61747 100644 --- a/src/utils/types/gryphn_image_format.h +++ b/src/utils/types/gryphn_image_format.h @@ -1,6 +1,7 @@ #pragma once typedef enum gnImageFormat_e { + GN_FORMAT_NONE, GN_FORMAT_BGRA8_SRGB } gnImageFormat;