graphicsdriver/metal: Avoid using @available syntax for old Xcode (#781)

This commit is contained in:
Hajime Hoshi 2019-01-12 00:33:43 +09:00
parent 802f3cfe3d
commit 72c1a73cac
2 changed files with 26 additions and 15 deletions

View File

@ -28,7 +28,10 @@ import (
"github.com/hajimehoshi/ebiten/internal/graphicsdriver/metal/mtl"
)
// #cgo CFLAGS: -mmacosx-version-min=10.11
// Suppress the warnings about availability guard with -Wno-unguarded-availability-new.
// It is because old Xcode (8 or older?) does not accept @available syntax.
// #cgo CFLAGS: -mmacosx-version-min=10.11 -Wno-unguarded-availability-new
// #cgo LDFLAGS: -framework QuartzCore -framework Foundation -framework CoreGraphics
//
// #include "ca.h"

View File

@ -46,27 +46,35 @@ const char *MetalLayer_SetPixelFormat(void *metalLayer, uint16_t pixelFormat) {
const char *MetalLayer_SetMaximumDrawableCount(void *metalLayer,
uint_t maximumDrawableCount) {
if (@available(macOS 10.13.2, *)) {
@try {
if ([(CAMetalLayer *)metalLayer
respondsToSelector:@selector(setMaximumDrawableCount:)]) {
[((CAMetalLayer *)metalLayer)
setMaximumDrawableCount:(NSUInteger)maximumDrawableCount];
}
} @catch (NSException *exception) {
return exception.reason.UTF8String;
// @available syntax is not available for old Xcode (#781)
//
// If possible, we'd want to write the guard like:
//
// if (@available(macOS 10.13.2, *)) { ...
@try {
if ([(CAMetalLayer *)metalLayer
respondsToSelector:@selector(setMaximumDrawableCount:)]) {
[((CAMetalLayer *)metalLayer)
setMaximumDrawableCount:(NSUInteger)maximumDrawableCount];
}
} @catch (NSException *exception) {
return exception.reason.UTF8String;
}
return NULL;
}
void MetalLayer_SetDisplaySyncEnabled(void *metalLayer,
BOOL displaySyncEnabled) {
if (@available(macOS 10.13, *)) {
if ([(CAMetalLayer *)metalLayer
respondsToSelector:@selector(setDisplaySyncEnabled:)]) {
[((CAMetalLayer *)metalLayer) setDisplaySyncEnabled:displaySyncEnabled];
}
// @available syntax is not available for old Xcode (#781)
//
// If possible, we'd want to write the guard like:
//
// if (@available(macOS 10.13, *)) { ...
if ([(CAMetalLayer *)metalLayer
respondsToSelector:@selector(setDisplaySyncEnabled:)]) {
[((CAMetalLayer *)metalLayer) setDisplaySyncEnabled:displaySyncEnabled];
}
}