diff --git a/CMakeLists.txt b/CMakeLists.txt index 8108b39..28ca2b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,12 +6,12 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) find_package(Kodi REQUIRED) find_package(glm REQUIRED) -if(APP_RENDER_SYSTEM STREQUAL "gl" OR NOT APP_RENDER_SYSTEM) +if(NOT WIN32 AND (APP_RENDER_SYSTEM STREQUAL "gl" OR NOT APP_RENDER_SYSTEM)) find_package(OpenGl REQUIRED) set(DEPLIBS ${OPENGL_LIBRARIES}) set(includes ${OPENGL_INCLUDE_DIR}) add_definitions(${OPENGL_DEFINITIONS}) -elseif(APP_RENDER_SYSTEM STREQUAL "gles") +else() find_package(OpenGLES REQUIRED) set(DEPLIBS ${OPENGLES_LIBRARIES}) set(includes ${OPENGLES_INCLUDE_DIR}) diff --git a/FindOpenGLES.cmake b/FindOpenGLES.cmake index 7e1eaa0..aaae6d0 100644 --- a/FindOpenGLES.cmake +++ b/FindOpenGLES.cmake @@ -9,46 +9,61 @@ # OPENGLES_INCLUDE_DIRS - the OpenGLES include directory # OPENGLES_LIBRARIES - the OpenGLES libraries # OPENGLES_DEFINITIONS - the OpenGLES definitions +# +# Note: +# On Windows with angle the *_INCLUDE_DIRS and +# *_DEFINITIONS are undefined, but are set +# global by the kodi-angle package. -if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) - set(_brcmprefix brcm) -endif() +if(WIN32) + # defined here and not on addon to have it free of OS related 'if' + # and this file as standard for addons where need it + find_package(kodi-angle REQUIRED) + set(OPENGLES_LIBRARIES kodi::angle::libGLESv2 kodi::angle::libEGL) + set(OPENGLES_FOUND ${kodi-angle_FOUND}) + set(OPENGLES_DEFINITIONS -DHAS_GLES=3) +else() + if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) + set(_brcmprefix brcm) + endif() -if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_OPENGLES ${_brcmprefix}glesv2 QUIET) -endif() + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_OPENGLES ${_brcmprefix}glesv2 QUIET) + endif() -if(NOT CORE_SYSTEM_NAME STREQUAL darwin_embedded AND NOT CORE_SYSTEM_NAME STREQUAL ios) - find_path(OPENGLES_INCLUDE_DIR GLES2/gl2.h - PATHS ${PC_OPENGLES_INCLUDEDIR}) - find_library(OPENGLES_gl_LIBRARY NAMES ${_brcmprefix}GLESv2 - PATHS ${PC_OPENGLES_LIBDIR}) -else() - find_library(OPENGLES_gl_LIBRARY NAMES OpenGLES - PATHS ${CMAKE_OSX_SYSROOT}/System/Library - PATH_SUFFIXES Frameworks - NO_DEFAULT_PATH) - set(OPENGLES_INCLUDE_DIR ${OPENGLES_gl_LIBRARY}/Headers) -endif() + if(NOT CORE_SYSTEM_NAME STREQUAL ios AND + NOT CORE_SYSTEM_NAME STREQUAL darwin_embedded) + find_path(OPENGLES_INCLUDE_DIR GLES2/gl2.h + PATHS ${PC_OPENGLES_INCLUDEDIR}) + find_library(OPENGLES_gl_LIBRARY NAMES ${_brcmprefix}GLESv2 + PATHS ${PC_OPENGLES_LIBDIR}) + else() + find_library(OPENGLES_gl_LIBRARY NAMES OpenGLES + PATHS ${CMAKE_OSX_SYSROOT}/System/Library + PATH_SUFFIXES Frameworks + NO_DEFAULT_PATH) + set(OPENGLES_INCLUDE_DIR ${OPENGLES_gl_LIBRARY}/Headers) + endif() -find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h) + find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h) -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(OpenGLES - REQUIRED_VARS OPENGLES_gl_LIBRARY OPENGLES_INCLUDE_DIR) + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(OpenGLES + REQUIRED_VARS OPENGLES_gl_LIBRARY OPENGLES_INCLUDE_DIR) -find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h - PATHS ${PC_OPENGLES_INCLUDEDIR}) + find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h + PATHS ${PC_OPENGLES_INCLUDEDIR}) -if(OPENGLES_FOUND) - set(OPENGLES_LIBRARIES ${OPENGLES_gl_LIBRARY}) - if(OPENGLES3_INCLUDE_DIR) - set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR} ${OPENGLES3_INCLUDE_DIR}) - set(OPENGLES_DEFINITIONS -DHAS_GLES=3) - mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES3_INCLUDE_DIR OPENGLES_gl_LIBRARY) - else() - set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR}) - set(OPENGLES_DEFINITIONS -DHAS_GLES=2) - mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES_gl_LIBRARY) + if(OPENGLES_FOUND) + set(OPENGLES_LIBRARIES ${OPENGLES_gl_LIBRARY}) + if(OPENGLES3_INCLUDE_DIR) + set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR} ${OPENGLES3_INCLUDE_DIR}) + set(OPENGLES_DEFINITIONS -DHAS_GLES=3) + mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES3_INCLUDE_DIR OPENGLES_gl_LIBRARY) + else() + set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR}) + set(OPENGLES_DEFINITIONS -DHAS_GLES=2) + mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES_gl_LIBRARY) + endif() endif() endif() diff --git a/Jenkinsfile b/Jenkinsfile index d2a5c5f..3d3080a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1 +1 @@ -buildPlugin(version: "Matrix", platforms: ['android-armv7', 'android-aarch64', 'ios-armv7', 'ios-aarch64', 'osx-x86_64', 'ubuntu-ppa']) +buildPlugin(version: "Matrix") diff --git a/README.md b/README.md index e022584..cb713b6 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ This is a [Kodi](http://kodi.tv) screensaver addon. [![Build Status](https://travis-ci.org/xbmc/screensaver.cpblobs.svg?branch=Matrix)](https://travis-ci.org/xbmc/screensaver.cpblobs/branches) +[![Build Status](https://dev.azure.com/teamkodi/binary-addons/_apis/build/status/xbmc.screensaver.cpblobs?branchName=Matrix)](https://dev.azure.com/teamkodi/binary-addons/_build/latest?definitionId=43&branchName=Matrix) + ## Build instructions diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..bde1d23 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,35 @@ +version: BuildNr.{build} + +image: Visual Studio 2017 + +shallow_clone: true + +clone_folder: c:\projects\screensaver.cpblobs + +environment: + app_id: screensaver.cpblobs + + matrix: + - GENERATOR: "Visual Studio 15" + CONFIG: Release + CMAKE_DEFINES: -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_VERSION="10.0.17763.0" + - GENERATOR: "Visual Studio 15 Win64" + CONFIG: Release + CMAKE_DEFINES: -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_VERSION="10.0.17763.0" + - GENERATOR: "Visual Studio 15 Win64" + CONFIG: Release + CMAKE_DEFINES: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" + - GENERATOR: "Visual Studio 15 ARM" + CONFIG: Release + CMAKE_DEFINES: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" + +build_script: + - cd .. + - git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git + - cd %app_id% + - mkdir build + - cd build + - mkdir -p definition\%app_id% + - echo %app_id% %APPVEYOR_BUILD_FOLDER% %APPVEYOR_REPO_COMMIT% > definition\%app_id%\%app_id%.txt + - cmake -T host=x64 -G "%GENERATOR%" %CMAKE_DEFINES% -DADDONS_TO_BUILD=%app_id% -DCMAKE_BUILD_TYPE=%CONFIG% -DADDONS_DEFINITION_DIR=%APPVEYOR_BUILD_FOLDER%/build/definition -DADDON_SRC_PREFIX=../.. -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons + - cmake --build . --config %CONFIG% --target %app_id% diff --git a/depends/windows/angle/0001-fix-uwp.patch b/depends/windows/angle/0001-fix-uwp.patch new file mode 100644 index 0000000..7f5bc5f --- /dev/null +++ b/depends/windows/angle/0001-fix-uwp.patch @@ -0,0 +1,263 @@ +diff --git a/commit.h b/commit.h +new file mode 100644 +index 0000000..654e023 +--- /dev/null ++++ b/commit.h +@@ -0,0 +1,3 @@ ++#define ANGLE_COMMIT_HASH "invalid-hash" ++#define ANGLE_COMMIT_HASH_SIZE 12 ++#define ANGLE_COMMIT_DATE "invalid-date" +diff --git a/src/common/system_utils_win.cpp b/src/common/system_utils_win.cpp +index 7db4485..04b6a85 100644 +--- a/src/common/system_utils_win.cpp ++++ b/src/common/system_utils_win.cpp +@@ -37,6 +37,7 @@ const char *GetSharedLibraryExtension() + + Optional GetCWD() + { ++#ifndef ANGLE_ENABLE_WINDOWS_STORE + std::array pathBuf; + DWORD result = GetCurrentDirectoryA(static_cast(pathBuf.size()), pathBuf.data()); + if (result == 0) +@@ -44,11 +45,18 @@ Optional GetCWD() + return Optional::Invalid(); + } + return std::string(pathBuf.data()); ++#else ++ return std::string(); ++#endif + } + + bool SetCWD(const char *dirName) + { ++#ifndef ANGLE_ENABLE_WINDOWS_STORE + return (SetCurrentDirectoryA(dirName) == TRUE); ++#else ++ return false; ++#endif + } + + bool UnsetEnvironmentVar(const char *variableName) +@@ -86,12 +94,14 @@ class Win32Library : public Library + public: + Win32Library(const char *libraryName) + { ++#ifndef ANGLE_ENABLE_WINDOWS_STORE + char buffer[MAX_PATH]; + int ret = snprintf(buffer, MAX_PATH, "%s.%s", libraryName, GetSharedLibraryExtension()); + if (ret > 0 && ret < MAX_PATH) + { + mModule = LoadLibraryA(buffer); + } ++#endif + } + + ~Win32Library() override +diff --git a/src/libANGLE/renderer/d3d/RendererD3D.cpp b/src/libANGLE/renderer/d3d/RendererD3D.cpp +index 2a8d022..36f1f25 100644 +--- a/src/libANGLE/renderer/d3d/RendererD3D.cpp ++++ b/src/libANGLE/renderer/d3d/RendererD3D.cpp +@@ -229,7 +229,9 @@ GLenum DefaultGLErrorCode(HRESULT hr) + { + switch (hr) + { ++#ifdef ANGLE_ENABLE_D3D9 + case D3DERR_OUTOFVIDEOMEMORY: ++#endif + case E_OUTOFMEMORY: + return GL_OUT_OF_MEMORY; + default: +diff --git a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp +index 9b67ac4..20584e3 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp ++++ b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp +@@ -1192,11 +1192,13 @@ void Renderer11::generateDisplayExtensions(egl::DisplayExtensions *outExtensions + // All D3D feature levels support robust resource init + outExtensions->robustResourceInitialization = true; + ++#ifndef ANGLE_ENABLE_WINDOWS_STORE + // Compositor Native Window capabilies require WinVer >= 1803 + if (CompositorNativeWindow11::IsSupportedWinRelease()) + { + outExtensions->windowsUIComposition = true; + } ++#endif + } + + angle::Result Renderer11::flush(Context11 *context11) +@@ -1270,7 +1272,11 @@ NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window, + const egl::Config *config, + const egl::AttributeMap &attribs) const + { +- auto useWinUiComp = window != nullptr && !NativeWindow11Win32::IsValidNativeWindow(window); ++#ifdef ANGLE_ENABLE_WINDOWS_STORE ++ (void)attribs; ++ return new NativeWindow11WinRT(window, config->alphaSize > 0); ++#else ++ auto useWinUiComp = window != nullptr && !isValidNativeWindow(window); + + if (useWinUiComp) + { +@@ -1278,15 +1284,11 @@ NativeWindowD3D *Renderer11::createNativeWindow(EGLNativeWindowType window, + } + else + { +-#ifdef ANGLE_ENABLE_WINDOWS_STORE +- UNUSED_VARIABLE(attribs); +- return new NativeWindow11WinRT(window, config->alphaSize > 0); +-#else + return new NativeWindow11Win32( + window, config->alphaSize > 0, + attribs.get(EGL_DIRECT_COMPOSITION_ANGLE, EGL_FALSE) == EGL_TRUE); +-#endif + } ++#endif + } + + egl::Error Renderer11::getD3DTextureInfo(const egl::Config *configuration, +diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp +index cb2f279..99b615c 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp ++++ b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp +@@ -145,6 +145,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, + unsigned int width, + unsigned int height, + bool containsAlpha, ++ unsigned int samples, + IDXGISwapChain1 **swapChain) + { + if (device == nullptr || factory == nullptr || swapChain == nullptr || width == 0 || +@@ -158,7 +159,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, + swapChainDesc.Height = height; + swapChainDesc.Format = format; + swapChainDesc.Stereo = FALSE; +- swapChainDesc.SampleDesc.Count = 1; ++ swapChainDesc.SampleDesc.Count = samples; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.BufferUsage = + DXGI_USAGE_SHADER_INPUT | DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER; +@@ -213,10 +214,10 @@ HRESULT GetCoreWindowSizeInPixels(const ComPtr displayProperties; ++ ComPtr displayProperties; + + if (SUCCEEDED(GetActivationFactory( +- HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayProperties).Get(), ++ HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayInformation).Get(), + displayProperties.GetAddressOf()))) + { + float dpi = 96.0f; +diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h +index ae57cfb..3262d0a 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h ++++ b/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h +@@ -35,7 +35,8 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, + DXGI_FORMAT format, + unsigned int width, + unsigned int height, + bool containsAlpha, ++ unsigned int samples, + IDXGISwapChain1 **swapChain) override; + + protected: +@@ -49,7 +50,7 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, + ComPtr> mPropertyMap; + }; + +-[uuid(7F924F66 - EBAE - 40E5 - A10B - B8F35E245190)] class CoreWindowSizeChangedHandler ++[uuid(7F924F66-EBAE-40E5-A10B-B8F35E245190)] class CoreWindowSizeChangedHandler + : public Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags, + IWindowSizeChangedEventHandler> +diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h +index 708e8a2..9bfa4c4 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h ++++ b/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h +@@ -53,6 +53,7 @@ class InspectableNativeWindow + unsigned int width, + unsigned int height, + bool containsAlpha, ++ unsigned int samples, + IDXGISwapChain1 **swapChain) = 0; + + bool getClientRect(RECT *rect) +diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp +index 8972ca2..571955d 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp ++++ b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.cpp +@@ -88,6 +88,7 @@ HRESULT NativeWindow11WinRT::createSwapChain(ID3D11Device *device, + DXGI_FORMAT format, + UINT width, + UINT height, ++ UINT samples, + IDXGISwapChain **swapChain) + { + if (mImpl) +@@ -95,7 +96,7 @@ HRESULT NativeWindow11WinRT::createSwapChain(ID3D11Device *device, + IDXGIFactory2 *factory2 = d3d11::DynamicCastComObject(factory); + IDXGISwapChain1 *swapChain1 = nullptr; + HRESULT result = +- mImpl->createSwapChain(device, factory2, format, width, height, mHasAlpha, &swapChain1); ++ mImpl->createSwapChain(device, factory2, format, width, height, mHasAlpha, samples, &swapChain1); + SafeRelease(factory2); + *swapChain = static_cast(swapChain1); + return result; +diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h +index eac5b21..92c3121 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h ++++ b/src/libANGLE/renderer/d3d/d3d11/winrt/NativeWindow11WinRT.h +@@ -34,6 +34,7 @@ class NativeWindow11WinRT : public NativeWindow11 + DXGI_FORMAT format, + UINT width, + UINT height, ++ UINT samples, + IDXGISwapChain **swapChain) override; + + void commitChange() override; +diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp +index af0beb6..2fc32f1 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp ++++ b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp +@@ -247,6 +247,7 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, + unsigned int width, + unsigned int height, + bool containsAlpha, ++ unsigned int samples, + IDXGISwapChain1 **swapChain) + { + if (device == nullptr || factory == nullptr || swapChain == nullptr || width == 0 || +@@ -260,7 +261,7 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, + swapChainDesc.Height = height; + swapChainDesc.Format = format; + swapChainDesc.Stereo = FALSE; +- swapChainDesc.SampleDesc.Count = 1; ++ swapChainDesc.SampleDesc.Count = samples; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.BufferUsage = + DXGI_USAGE_SHADER_INPUT | DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER; +diff --git a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h +index 09642ee..7fc13da 100644 +--- a/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h ++++ b/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h +@@ -28,6 +28,7 @@ class SwapChainPanelNativeWindow : public InspectableNativeWindow, + unsigned int width, + unsigned int height, + bool containsAlpha, ++ unsigned int samples, + IDXGISwapChain1 **swapChain) override; + + protected: +@@ -43,7 +44,7 @@ class SwapChainPanelNativeWindow : public InspectableNativeWindow, + ComPtr mSwapChain; + }; + +-[uuid(8ACBD974 - 8187 - 4508 - AD80 - AEC77F93CF36)] class SwapChainPanelSizeChangedHandler ++[uuid(8ACBD974-8187-4508-AD80-AEC77F93CF36)] class SwapChainPanelSizeChangedHandler + : public Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags, + ABI::Windows::UI::Xaml::ISizeChangedEventHandler> +-- +2.20.1.windows.1 + diff --git a/depends/windows/angle/CMakeLists.txt b/depends/windows/angle/CMakeLists.txt new file mode 100644 index 0000000..26f13dd --- /dev/null +++ b/depends/windows/angle/CMakeLists.txt @@ -0,0 +1,359 @@ +cmake_minimum_required(VERSION 3.8) +project(angle) + +message(STATUS "Used CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "Used CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}") +message(STATUS "Used CMAKE_HOST_SYSTEM_VERSION: ${CMAKE_HOST_SYSTEM_VERSION}") + +if(CMAKE_SYSTEM_VERSION VERSION_LESS 10.0.16299.0) + message(FATAL_ERROR "Minimal Windows system version must be: 10.0.16299.0") +endif() + +# Force package name to kodi, e.g. BUILD_KODI_ADDON not defined on addon depends build! +if(NOT PACKAGE_NAME) + set(PACKAGE_NAME "kodi") +endif() + +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) + cmake_policy(SET CMP0076 NEW) +endif() + +option(ANGLE_ENABLE_NULL "Enable null renderer" OFF) +# windows options +option(ANGLE_ENABLE_D3D9 "Enable support D3D9 renderer (Windows desktop only)" OFF) +option(ANGLE_ENABLE_WGL "Enable support OpenGL renderer on Windows" OFF) + +if(CMAKE_SIZEOF_VOID_P EQUAL 4) + add_definitions(-DANGLE_IS_32_BIT_CPU) +elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + add_definitions(-DANGLE_IS_64_BIT_CPU) +else() + message(FATAL_ERROR "Unknown current CPU bit size: ${CMAKE_SIZEOF_VOID_P}") +endif() + +if(WIN32 AND NOT WINDOWS_STORE) + set(WINDOWS_DESKTOP TRUE) +else() + set(WINDOWS_DESKTOP FALSE) +endif() +if (WINDOWS_DESKTOP OR WINDOWS_STORE) + set(IS_WIN 1) + set(WINDOWS_ANY TRUE) +else() + set(WINDOWS_ANY FALSE) +endif() + +if(UNIX AND NOT APPLE) + set(LINUX TRUE) +else() + set(LINUX FALSE) +endif() + +if(CMAKE_BUILD_TYPE MATCHES DEBUG) + set(IS_DEBUG TRUE) +else() + set(IS_DEBUG FALSE) +endif() + +if(WINDOWS_ANY) + add_compile_options(/d2guard4 /Wv:18 /guard:cf) +else() + add_compile_options(-std=c++17 -fPIC) +endif() + +if(APPLE) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework IOSurface -framework QuartzCore -framework CoreGraphics") +endif() + +set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") +set(CMAKE_STATIC_LIBRARY_PREFIX "") +set(CMAKE_DEBUG_POSTFIX "_dbg") + +# if BUILD_SHARED_LIBS is undefined comes it to a cmake build error, set it as default to 0. +if(NOT DEFINED BUILD_SHARED_LIBS) + set(BUILD_SHARED_LIBS 0) +endif() + +add_definitions( + -D_CRT_SECURE_NO_DEPRECATE + -D_SCL_SECURE_NO_WARNINGS + -D_HAS_EXCEPTIONS=0 + -DNOMINMAX + -DANGLE_STANDALONE_BUILD) +if(IS_DEBUG) + add_definitions(-DANGLE_ENABLE_DEBUG_ANNOTATIONS) +endif() +if(DCHECK_ALWAYS_ON) + add_definitions(-DANGLE_ENABLE_RELEASE_ASSERTS) +endif() + +# Shared library function visibility +if(IS_WIN) + set(ANGLE_GL_VISIBILITY_CONFIG GL_APICALL= + GL_API=) +else() + set(ANGLE_GL_VISIBILITY_CONFIG GL_APICALL=__attribute__((visibility(\"default\"))) + GL_API=__attribute__((visibility(\"default\")))) +endif() + +# This config controls export definitions on ANGLE API calls. +set(ANGLE_STATIC_DEFINES ANGLE_EXPORT= + ANGLE_UTIL_EXPORT= + EGLAPI= + GL_APICALL= + GL_API=) + +set(GL_PROTOTYPES GL_GLES_PROTOTYPES=1 + EGL_EGL_PROTOTYPES=1 + GL_GLEXT_PROTOTYPES + EGL_EGLEXT_PROTOTYPES + HAS_ANGLE) + +########## +# Generate required commit.h file +set(COMMIT_H + "#define ANGLE_COMMIT_HASH \"invalid-hash\"\n" + "#define ANGLE_COMMIT_HASH_SIZE 12\n" + "#define ANGLE_COMMIT_DATE \"invalid-date\"\n") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/id/commit.h ${COMMIT_H}) +include_directories(include ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/src + ${CMAKE_CURRENT_SOURCE_DIR}/src/common/third_party/base + ${CMAKE_CURRENT_BINARY_DIR}/include) + +########## +# Load angle source list by translating *.gni's to cmake format +set(GNI_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/compiler.gni + ${CMAKE_CURRENT_SOURCE_DIR}/src/libGLESv2.gni + ${CMAKE_CURRENT_SOURCE_DIR}/src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni + ${CMAKE_CURRENT_SOURCE_DIR}/util/util.gni) + +set(ANGLE_SOURCE_FILES "") +foreach(file ${GNI_FILES}) + get_filename_component(fullpath "${file}" ABSOLUTE) + get_filename_component(file "${file}" NAME_WE) + + file(READ ${fullpath} CONTENT_GNI) + string(REGEX REPLACE "([0-9a-z_]+)([^a-z]+)([*^\=)])" "set(\\1 XXXYYY \\1 ZZZ" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "is_win" "IS_WIN" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "is_linux" "IS_LINUX" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "is_android" "IS_ANDROID" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "is_fuchsia" "IS_FUCHSIA" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "is_mac" "IS_MAC" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "||" "OR" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "}" "endif()" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE " {" "" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "\"," "" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "\"" "" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE " [" "" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "]" ")" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE " ZZZ" "}" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "YYY " "{" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE "XXX" "$" CONTENT_GNI ${CONTENT_GNI}) + if(CMAKE_VERSION VERSION_LESS 3.13) + string(REPLACE " src/" " \${CMAKE_CURRENT_SOURCE_DIR}/src/" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE " include/" " \${CMAKE_CURRENT_SOURCE_DIR}/include/" CONTENT_GNI ${CONTENT_GNI}) + string(REPLACE " util/" " \${CMAKE_CURRENT_SOURCE_DIR}/util/" CONTENT_GNI ${CONTENT_GNI}) + endif() + file(WRITE ${CMAKE_BINARY_DIR}/angleSourceList-${file}.cmake ${CONTENT_GNI}) + list(APPEND ANGLE_SOURCE_FILES ${CMAKE_BINARY_DIR}/angleSourceList-${file}.cmake) +endforeach() + +foreach(file ${ANGLE_SOURCE_FILES}) + include(${file}) +endforeach() + +########## +# angle::angle_system_utils +add_library(angle_system_utils OBJECT ${angle_system_utils_sources}) +add_library(angle::system_utils ALIAS angle_system_utils) + +########## +# angle::xxhash +add_library(angle_xxhash OBJECT ${xxhash_sources}) +add_library(angle::xxhash ALIAS angle_xxhash) + +########## +# angle::common +add_library(angle_common OBJECT ${libangle_common_sources} + ${libangle_includes} + ${CMAKE_SOURCE_DIR}/src/common/version.h) +add_library(angle::common ALIAS angle_common) + +########## +# angle::image_util +add_library(angle_image_util OBJECT ${libangle_image_util_sources}) +add_library(angle::image_util ALIAS angle_image_util) + +########## +# angle::preprocessor +add_library(angle_preprocessor OBJECT ${angle_preprocessor_sources}) +add_library(angle::preprocessor ALIAS angle_preprocessor) + +########## +# angle::translator +add_library(angle_translator OBJECT ${angle_translator_sources} + ${angle_translator_essl_sources} + ${angle_translator_glsl_sources} + ${angle_translator_hlsl_sources}) +target_compile_definitions(angle_translator PUBLIC ANGLE_ENABLE_ESSL + ANGLE_ENABLE_GLSL + ANGLE_ENABLE_HLSL) +add_library(angle::translator ALIAS angle_translator) + +########## +# libANGLE + +## OpenGL Renderer +if((WINDOWS_DESKTOP AND ANGLE_ENABLE_WGL) OR LINUX OR APPLE) + add_library(angle_renderer_opengl INTERFACE) + if(WINDOWS_DESKTOP) + target_sources(angle_renderer_opengl INTERFACE $ + $) + elseif(APPLE) + target_sources(angle_renderer_opengl INTERFACE $ + $) + elseif(LINUX) + target_sources(angle_renderer_opengl INTERFACE $ + $) + endif() + + target_compile_definitions(angle_renderer_opengl INTERFACE ANGLE_ENABLE_OPENGL) + add_library(angle::renderer::opengl ALIAS angle_renderer_opengl) +endif() + +# D3D Renderers +if(WINDOWS_ANY) + ## WinRT D3D Renderer + if(WINDOWS_STORE) + add_library(angle_renderer_winrt INTERFACE) + target_sources(angle_renderer_winrt INTERFACE $) + target_link_libraries(angle_renderer_winrt INTERFACE d3dcompiler.lib) + add_library(angle::renderer::winrt ALIAS angle_renderer_winrt) + endif() + + ## Win32/d3d9 D3D Renderer + if(WINDOWS_DESKTOP AND ANGLE_ENABLE_D3D9) + add_library(angle_renderer_win32 INTERFACE) + target_sources(angle_renderer_win32 INTERFACE $ + $) + target_compile_definitions(angle_renderer_win32 INTERFACE ANGLE_ENABLE_D3D9) + target_link_libraries(angle_renderer_win32 INTERFACE d3d9.lib) + add_library(angle::renderer::win32 ALIAS angle_renderer_win32) + list(APPEND ANGLE_DEPEND_LIBRARIES d3d9.lib) + endif() + + ## D3D11 Base renderer + add_library(angle_renderer_d3d INTERFACE) + target_sources(angle_renderer_d3d INTERFACE $ + $ + $) + if(WINDOWS_DESKTOP) + target_sources(angle_renderer_d3d INTERFACE $) + endif() + target_compile_definitions(angle_renderer_d3d INTERFACE + ANGLE_ENABLE_D3D11 + "ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ \"d3dcompiler_47.dll\", \"d3dcompiler_46.dll\", \"d3dcompiler_43.dll\" }" + ) + target_link_libraries(angle_renderer_d3d INTERFACE d3d11.lib dxguid.lib) + add_library(angle::renderer::d3d ALIAS angle_renderer_d3d) + list(APPEND ANGLE_DEPEND_LIBRARIES d3d11.lib dxguid.lib) +endif() + +## Core libANGLE library +if(LINUX OR APPLE) + set(LIBANGLE_RENDERER_PLATFORM + $ + ) +elseif(WINDOWS_STORE) + set(LIBANGLE_RENDERER_PLATFORM + $ + $ + ) +elseif(WINDOWS_DESKTOP) + set(LIBANGLE_RENDERER_PLATFORM + $ + $<$:$> + $<$:$> + gdi32 + ) +else() + set(LIBANGLE_RENDERER_PLATFORM ) +endif() + +if(ANGLE_ENABLE_NULL) + add_library(angle_renderer_null INTERFACE) + target_sources(angle_renderer_null INTERFACE $ + $) + add_library(angle::renderer::null ALIAS angle_renderer_null) + list(APPEND LIBANGLE_RENDERER_PLATFORM $) +endif() + +add_library(libANGLE INTERFACE) +target_sources(libANGLE INTERFACE $ + $ + $ + $ + $ + $ + $) +target_link_libraries(libANGLE INTERFACE ${LIBANGLE_RENDERER_PLATFORM}) +target_include_directories(libANGLE INTERFACE $) +target_compile_definitions(libANGLE INTERFACE LIBANGLE_IMPLEMENTATION + $<$:ANGLE_ENABLE_NULL> + $<$:ANGLE_USE_X11>) +add_library(angle::libANGLE ALIAS libANGLE) + +########## +# libGLESv2 +add_library(libGLESv2 ${libglesv2_sources} + ${libangle_includes} + ${CMAKE_CURRENT_SOURCE_DIR}/src/libGLESv2/libGLESv2_autogen.def) +target_link_libraries(libGLESv2 PRIVATE $ + ${ANGLE_DEPEND_LIBRARIES}) +if(BUILD_SHARED_LIBS) + target_compile_definitions(libGLESv2 PRIVATE LIBGLESV2_IMPLEMENTATION + ${GL_PROTOTYPES} + ${ANGLE_GL_VISIBILITY_CONFIG}) +else() + target_compile_definitions(libGLESv2 PRIVATE LIBGLESV2_IMPLEMENTATION + ${GL_PROTOTYPES} + PUBLIC ${ANGLE_STATIC_DEFINES}) +endif() +target_include_directories(libGLESv2 PUBLIC $) +target_compile_definitions(libGLESv2 PUBLIC $) + +########## +# libEGL +add_library(libEGL ${libegl_sources} + ${libangle_includes} + $<$:${CMAKE_CURRENT_SOURCE_DIR}/src/libEGL/libEGL.def>) +target_link_libraries(libEGL PUBLIC libGLESv2) +target_include_directories(libEGL PUBLIC $) + +########## +# Angle installation +set_target_properties(libGLESv2 PROPERTIES PREFIX "") +set_target_properties(libEGL PROPERTIES PREFIX "") + +install(TARGETS libGLESv2 + libEGL + EXPORT ANGLEExport + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) + +install(EXPORT ANGLEExport + FILE ${PACKAGE_NAME}-angle-config.cmake + NAMESPACE ${PACKAGE_NAME}::angle:: + DESTINATION share/${PACKAGE_NAME}-angle) + +if(NOT DISABLE_INSTALL_HEADERS) + install(DIRECTORY include/ + DESTINATION include + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.inc" + PATTERN "GLSLANG" EXCLUDE + PATTERN "export.h" EXCLUDE) +endif() diff --git a/depends/windows/angle/angle.sha256 b/depends/windows/angle/angle.sha256 new file mode 100644 index 0000000..31d00b2 --- /dev/null +++ b/depends/windows/angle/angle.sha256 @@ -0,0 +1 @@ +28836135bd7549c01d7d07ae5a0a0956096f2c63355cf243ef306b2213bd91ae diff --git a/depends/windows/angle/angle.txt b/depends/windows/angle/angle.txt new file mode 100644 index 0000000..e9c9ff3 --- /dev/null +++ b/depends/windows/angle/angle.txt @@ -0,0 +1 @@ +angle https://github.com/google/angle/archive/chromium/3712.tar.gz diff --git a/depends/windows/angle/flags.txt b/depends/windows/angle/flags.txt new file mode 100644 index 0000000..1d46235 --- /dev/null +++ b/depends/windows/angle/flags.txt @@ -0,0 +1 @@ +-DCMAKE_SYSTEM_VERSION=10.0.17763.0 diff --git a/lib/SOIL2/CMakeLists.txt b/lib/SOIL2/CMakeLists.txt index 639f3e7..e8c4f98 100644 --- a/lib/SOIL2/CMakeLists.txt +++ b/lib/SOIL2/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.5) project(SOIL2) @@ -32,7 +32,9 @@ set(HEADER_FILES add_library(soil2 STATIC ${SRC_FILES} ${HEADER_FILES}) target_include_directories(soil2 PUBLIC ${CMAKE_CURRENT_LIST_DIR}/..) -target_link_libraries(soil2 PUBLIC ${OPENGL_LIBRARIES}) -if(CORE_SYSTEM_NAME STREQUAL osx) +if(CORE_SYSTEM_NAME STREQUAL darwin_embedded OR CORE_SYSTEM_NAME STREQUAL osx OR CORE_SYSTEM_NAME STREQUAL ios) target_link_libraries(soil2 PUBLIC "-framework CoreFoundation") +elseif(OPENGLES_FOUND) + target_compile_definitions(soil2 PRIVATE SOIL_GLES2) + target_link_libraries(soil2 PRIVATE ${OPENGLES_LIBRARIES}) endif() diff --git a/lib/SOIL2/SOIL2.c b/lib/SOIL2/SOIL2.c index 04a8239..c976cfa 100644 --- a/lib/SOIL2/SOIL2.c +++ b/lib/SOIL2/SOIL2.c @@ -33,7 +33,7 @@ #define SOIL_X11_PLATFORM #endif -#if ( defined( SOIL_PLATFORM_IOS ) || defined( SOIL_PLATFORM_ANDROID ) ) && ( !defined( SOIL_GLES1 ) && !defined( SOIL_GLES2 ) ) +#if ( defined(HAS_ANGLE) || defined( SOIL_PLATFORM_IOS ) || defined( SOIL_PLATFORM_ANDROID ) ) && ( !defined( SOIL_GLES1 ) && !defined( SOIL_GLES2 ) ) #define SOIL_GLES2 #endif @@ -41,7 +41,12 @@ #include #endif -#if defined( SOIL_GLES2 ) +#if defined(HAS_ANGLE) + #include + #ifndef APIENTRY + #define APIENTRY GL_APIENTRY + #endif +#elif defined( SOIL_GLES2 ) #ifdef SOIL_PLATFORM_IOS #include #include