get image count and preferred surface format

This commit is contained in:
Greg Wells
2025-05-24 18:41:13 -04:00
parent a3f1201062
commit 339b2c75e0
15 changed files with 214 additions and 82 deletions

View File

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