surface handles

This commit is contained in:
Greg Wells
2025-06-03 14:14:49 -04:00
parent d39f598d3c
commit fbc30509c4
21 changed files with 83 additions and 65 deletions

View File

@@ -1,22 +1,22 @@
#include "gryphn_surface.h"
#include "core/gryphn_platform_functions.h"
void gnDestroyWindowSurface(struct gnWindowSurface_t *windowSurface) {
void gnDestroyWindowSurface(gnWindowSurfaceHandle windowSurface) {
windowSurface->instance->functions->_gnDestroyWindowSurface(windowSurface);
}
struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormats(
struct gnWindowSurface_t windowSurface,
gnWindowSurfaceHandle windowSurface,
struct gnPhysicalDevice_t device,
uint32_t* formatCount
) {
struct gnSurfaceDetails_t surfaceDetails = windowSurface.instance->functions->_gnGetSurfaceDetails(&windowSurface, device);
struct gnSurfaceDetails_t surfaceDetails = windowSurface->instance->functions->_gnGetSurfaceDetails(windowSurface, device);
*formatCount = surfaceDetails.formatCount;
return surfaceDetails.formats;
}
gnBool gnIsSurfaceFormatSupported(
struct gnWindowSurface_t windowSurface,
gnWindowSurfaceHandle windowSurface,
struct gnPhysicalDevice_t device,
struct gnSurfaceFormat_t format
) {
@@ -31,7 +31,7 @@ gnBool gnIsSurfaceFormatSupported(
}
struct gnSurfaceFormat_t gnGetPreferredSurfaceFormat(
struct gnWindowSurface_t windowSurface,
gnWindowSurfaceHandle windowSurface,
struct gnPhysicalDevice_t device,
struct gnSurfaceFormat_t format
) {
@@ -53,17 +53,17 @@ struct gnSurfaceFormat_t gnGetPreferredSurfaceFormat(
return formats[0];
}
uint32_t gnGetMinImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device) {
struct gnSurfaceDetails_t surfaceDetails = surface.instance->functions->_gnGetSurfaceDetails(&surface, device);
uint32_t gnGetMinImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device) {
struct gnSurfaceDetails_t surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device);
return surfaceDetails.minImageCount;
}
uint32_t gnGetMaxImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device) {
struct gnSurfaceDetails_t surfaceDetails = surface.instance->functions->_gnGetSurfaceDetails(&surface, device);
uint32_t gnGetMaxImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device) {
struct gnSurfaceDetails_t surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device);
return surfaceDetails.maxImageCount;
}
uint32_t gnGetPreferredImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device) {
struct gnSurfaceDetails_t surfaceDetails = surface.instance->functions->_gnGetSurfaceDetails(&surface, device);
uint32_t gnGetPreferredImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device) {
struct gnSurfaceDetails_t surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device);
uint32_t imageCount = surfaceDetails.minImageCount + 1;
if (surfaceDetails.maxImageCount > 0 && imageCount > surfaceDetails.maxImageCount) {

View File

@@ -4,8 +4,6 @@
#include <utils/types/gryphn_image_format.h>
#include "core/output_device/gryphn_physical_output_device.h"
struct gnPlatformWindowSurface_t;
typedef struct gnSurfaceFormat_t {
gnImageFormat format;
gnColorSpace colorSpace;
@@ -18,18 +16,23 @@ typedef struct gnSurfaceDetails_t {
uint32_t minImageCount, maxImageCount;
} gnSufaceDetails;
typedef struct gnWindowSurface_t {
#ifdef GN_REVEAL_IMPL
struct gnWindowSurface_t {
struct gnPlatformWindowSurface_t* windowSurface;
gnInstanceHandle instance;
} gnWindowSurface;
void gnDestroyWindowSurface(struct gnWindowSurface_t* windowSurface);
};
#endif
// typedef struct gnWindowSurface_t* gnWindowSurfaceHandle;
void gnDestroyWindowSurface(gnWindowSurfaceHandle windowSurface);
struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormats(
struct gnWindowSurface_t windowSurface,
gnWindowSurfaceHandle windowSurface,
struct gnPhysicalDevice_t device,
uint32_t* formatCount
);
gnBool gnIsSurfaceFormatSupported(
struct gnWindowSurface_t windowSurface,
gnWindowSurfaceHandle windowSurface,
struct gnPhysicalDevice_t device,
struct gnSurfaceFormat_t format
);
@@ -37,10 +40,10 @@ gnBool gnIsSurfaceFormatSupported(
// 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,
gnWindowSurfaceHandle windowSurface,
struct gnPhysicalDevice_t device,
struct gnSurfaceFormat_t format
);
uint32_t gnGetMinImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device);
uint32_t gnGetMaxImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device);
uint32_t gnGetPreferredImageCount(struct gnWindowSurface_t surface, struct gnPhysicalDevice_t device);
uint32_t gnGetMinImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device);
uint32_t gnGetMaxImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device);
uint32_t gnGetPreferredImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device);

View File

@@ -4,12 +4,14 @@
#ifdef GN_PLATFORM_LINUX
#ifdef GN_WINDOW_X11
gnReturnCode gnCreateX11WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnX11WindowSurfaceInfo_t createInfo) {
gnReturnCode gnCreateX11WindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnX11WindowSurfaceInfo_t createInfo) {
*windowSurface = malloc(sizeof(struct gnWindowSurface_t));
return instance->functions->_gnCreateX11WindowSurface(windowSurface, instance, createInfo);
}
#endif
#ifdef GN_WINDOW_WAYLAND
gnReturnCode gnCreateWaylandWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnWaylandWindowSurfaceInfo_t createInfo) {
gnReturnCode gnCreateWaylandWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnWaylandWindowSurfaceInfo_t createInfo) {
*windowSurface = malloc(sizeof(struct gnWindowSurface_t));
return instance->functions->_gnCreateWaylandWindowSurface(windowSurface, instance, createInfo);
}
#endif
@@ -17,14 +19,16 @@
#ifdef GN_PLATFORM_WIN32
gnReturnCode gnCreateWin32WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnWin32WindowSurfaceInfo_t createInfo) {
gnReturnCode gnCreateWin32WindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnWin32WindowSurfaceInfo_t createInfo) {
*windowSurface = malloc(sizeof(struct gnWindowSurface_t));
return instance->functions->_gnCreateWin32WindowSurface(windowSurface, instance, createInfo);
}
#endif
#ifdef GN_PLATFORM_MACOS
gnReturnCode gnCreateMacOSWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnMacOSWindowSurfaceInfo_t createInfo) {
windowSurface->instance = instance;
return instance->functions->_gnCreateMacOSWindowSurface(windowSurface, instance, createInfo);
gnReturnCode gnCreateMacOSWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnMacOSWindowSurfaceInfo_t createInfo) {
*windowSurface = malloc(sizeof(struct gnWindowSurface_t));
(*windowSurface)->instance = instance;
return instance->functions->_gnCreateMacOSWindowSurface(*windowSurface, instance, createInfo);
}
#endif

View File

@@ -1,5 +1,7 @@
#pragma once
#include "gryphn_surface.h"
#include <platform/gryphn_platform_include.h>
#include "core/gryphn_handles.h"
#include "utils/gryphn_error_code.h"
#ifdef GN_PLATFORM_LINUX
#ifdef GN_WINDOW_X11
@@ -8,7 +10,7 @@
Window* window;
} gnX11WindowSurfaceCreateInfo;
gnReturnCode gnCreateX11WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnX11WindowSurfaceInfo_t createInfo);
gnReturnCode gnCreateX11WindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnX11WindowSurfaceInfo_t createInfo);
#endif
#ifdef GN_WINDOW_WAYLAND
typedef struct gnWaylandWindowSurfaceInfo_t {
@@ -16,7 +18,7 @@
wl_surface* surface;
} gnWaylandWindowSurfaceInfo;
gnReturnCode gnCreateWaylandWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnWaylandWindowSurfaceInfo_t createInfo);
gnReturnCode gnCreateWaylandWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnWaylandWindowSurfaceInfo_t createInfo);
#endif
#endif
@@ -27,7 +29,7 @@
HINSTANCE* instance;
} gnWin32WindowSurfaceInfo;
gnReturnCode gnCreateWin32WindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnWin32WindowSurfaceInfo_t createInfo);
gnReturnCode gnCreateWin32WindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnWin32WindowSurfaceInfo_t createInfo);
#endif
#ifdef GN_PLATFORM_MACOS
@@ -35,5 +37,5 @@
CAMetalLayer* layer;
} gnMacOSWindowSurfaceInfo;
gnReturnCode gnCreateMacOSWindowSurface(struct gnWindowSurface_t* windowSurface, gnInstanceHandle instance, struct gnMacOSWindowSurfaceInfo_t createInfo);
gnReturnCode gnCreateMacOSWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnMacOSWindowSurfaceInfo_t createInfo);
#endif