Add public APIs for creating a Metal view attached to an SDL window. Add SDL_metal.h.
This commit is contained in:
@@ -373,8 +373,10 @@ set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE})
|
||||
set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS})
|
||||
set_option(WASAPI "Use the Windows WASAPI audio driver" ${WINDOWS})
|
||||
set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS})
|
||||
set_option(RENDER_METAL "Enable the Metal render driver" ${APPLE})
|
||||
set_option(VIDEO_VIVANTE "Use Vivante EGL video driver" ${UNIX_SYS})
|
||||
dep_option(VIDEO_VULKAN "Enable Vulkan support" ON "ANDROID OR APPLE OR LINUX OR WINDOWS" OFF)
|
||||
set_option(VIDEO_METAL "Enable Metal support" ${APPLE})
|
||||
set_option(VIDEO_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS})
|
||||
dep_option(KMSDRM_SHARED "Dynamically load KMS DRM support" ON "VIDEO_KMSDRM" OFF)
|
||||
option_string(BACKGROUNDING_SIGNAL "number to use for magic backgrounding signal or 'OFF'" "OFF")
|
||||
@@ -1533,6 +1535,69 @@ elseif(APPLE)
|
||||
set(HAVE_SDL_FILESYSTEM TRUE)
|
||||
endif()
|
||||
|
||||
# iOS hack needed - http://code.google.com/p/ios-cmake/ ?
|
||||
if(SDL_VIDEO)
|
||||
if (IOS)
|
||||
set(SDL_VIDEO_DRIVER_UIKIT 1)
|
||||
file(GLOB UIKITVIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/uikit/*.m)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${UIKITVIDEO_SOURCES})
|
||||
else()
|
||||
CheckCOCOA()
|
||||
if(VIDEO_OPENGL)
|
||||
set(SDL_VIDEO_OPENGL 1)
|
||||
set(SDL_VIDEO_OPENGL_CGL 1)
|
||||
set(SDL_VIDEO_RENDER_OGL 1)
|
||||
set(HAVE_VIDEO_OPENGL TRUE)
|
||||
endif()
|
||||
|
||||
if(VIDEO_OPENGLES)
|
||||
set(SDL_VIDEO_OPENGL_EGL 1)
|
||||
set(SDL_VIDEO_OPENGL_ES2 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
||||
set(HAVE_VIDEO_OPENGLES TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(VIDEO_VULKAN OR VIDEO_METAL OR RENDER_METAL)
|
||||
set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x objective-c")
|
||||
check_c_source_compiles("
|
||||
#include <AvailabilityMacros.h>
|
||||
#import <Metal/Metal.h>
|
||||
#import <QuartzCore/CAMetalLayer.h>
|
||||
|
||||
#if TARGET_OS_SIMULATOR || (!TARGET_CPU_X86_64 && !TARGET_CPU_ARM64)
|
||||
#error Metal doesn't work on this configuration
|
||||
#endif
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
" HAVE_FRAMEWORK_METAL)
|
||||
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
|
||||
if(HAVE_FRAMEWORK_METAL)
|
||||
set(SDL_FRAMEWORK_METAL 1)
|
||||
set(SDL_FRAMEWORK_QUARTZCORE 1)
|
||||
else()
|
||||
set(VIDEO_VULKAN 0)
|
||||
set(VIDEO_METAL 0)
|
||||
set(RENDER_METAL 0)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(VIDEO_METAL)
|
||||
set(SDL_VIDEO_METAL 1)
|
||||
set(HAVE_VIDEO_METAL TRUE)
|
||||
endif()
|
||||
|
||||
if(RENDER_METAL)
|
||||
file(GLOB RENDER_METAL_SOURCES ${SDL2_SOURCE_DIR}/src/render/metal/*.m)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${RENDER_METAL_SOURCES})
|
||||
set(SDL_VIDEO_RENDER_METAL 1)
|
||||
set(HAVE_RENDER_METAL TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Actually load the frameworks at the end so we don't duplicate include.
|
||||
if(SDL_FRAMEWORK_COREVIDEO)
|
||||
find_library(COREVIDEO CoreVideo)
|
||||
@@ -1562,28 +1627,20 @@ elseif(APPLE)
|
||||
find_library(AUDIOTOOLBOX AudioToolbox)
|
||||
list(APPEND EXTRA_LIBS ${AUDIOTOOLBOX})
|
||||
endif()
|
||||
|
||||
# iOS hack needed - http://code.google.com/p/ios-cmake/ ?
|
||||
if(SDL_VIDEO)
|
||||
if (IOS)
|
||||
set(SDL_VIDEO_DRIVER_UIKIT 1)
|
||||
file(GLOB UIKITVIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/uikit/*.m)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} ${UIKITVIDEO_SOURCES})
|
||||
if(SDL_FRAMEWORK_METAL)
|
||||
if(IOS)
|
||||
find_library(METAL Metal)
|
||||
list(APPEND EXTRA_LIBS ${METAL})
|
||||
else()
|
||||
CheckCOCOA()
|
||||
if(VIDEO_OPENGL)
|
||||
set(SDL_VIDEO_OPENGL 1)
|
||||
set(SDL_VIDEO_OPENGL_CGL 1)
|
||||
set(SDL_VIDEO_RENDER_OGL 1)
|
||||
set(HAVE_VIDEO_OPENGL TRUE)
|
||||
endif()
|
||||
|
||||
if(VIDEO_OPENGLES)
|
||||
set(SDL_VIDEO_OPENGL_EGL 1)
|
||||
set(SDL_VIDEO_OPENGL_ES2 1)
|
||||
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
||||
set(HAVE_VIDEO_OPENGLES TRUE)
|
||||
endif()
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,Metal")
|
||||
endif()
|
||||
endif()
|
||||
if(SDL_FRAMEWORK_QUARTZCORE)
|
||||
if(IOS)
|
||||
find_library(QUARTZCORE QuartzCore)
|
||||
list(APPEND EXTRA_LIBS ${QUARTZCORE})
|
||||
else()
|
||||
list(APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,QuartzCore")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user