74 lines
2.8 KiB
C
74 lines
2.8 KiB
C
#include "gryphn_surface.h"
|
|
#include "core/gryphn_platform_functions.h"
|
|
|
|
void gnDestroyWindowSurface(struct gnWindowSurface_t *windowSurface) {
|
|
windowSurface->instance->functions->_gnDestroyWindowSurface(windowSurface);
|
|
}
|
|
|
|
struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormats(
|
|
struct gnWindowSurface_t windowSurface,
|
|
struct gnPhysicalDevice_t device,
|
|
uint32_t* 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];
|
|
}
|
|
|
|
uint32_t gnGetMinImageCount(struct gnWindowSurface_t 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);
|
|
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 imageCount = surfaceDetails.minImageCount + 1;
|
|
if (surfaceDetails.maxImageCount > 0 && imageCount > surfaceDetails.maxImageCount) {
|
|
imageCount = surfaceDetails.maxImageCount;
|
|
}
|
|
return imageCount;
|
|
}
|