Support a headless EGL option.
This is a new option to support completely headless running of Dolphin without X11 on systems that can properly support it.
This commit is contained in:
parent
184a7a3e0d
commit
628e9bad92
|
@ -13,6 +13,7 @@ option(ENABLE_QT2 "Enable Qt2 (use the other experimental Qt interface)" OFF)
|
||||||
option(ENABLE_PCH "Use PCH to speed up compilation" ON)
|
option(ENABLE_PCH "Use PCH to speed up compilation" ON)
|
||||||
option(ENABLE_LTO "Enables Link Time Optimization" OFF)
|
option(ENABLE_LTO "Enables Link Time Optimization" OFF)
|
||||||
option(ENABLE_GENERIC "Enables generic build that should run on any little-endian host" OFF)
|
option(ENABLE_GENERIC "Enables generic build that should run on any little-endian host" OFF)
|
||||||
|
option(ENABLE_HEADLESS "Enables running Dolphin as a headless variant" OFF)
|
||||||
|
|
||||||
# Enable SDL for default on operating systems that aren't OSX, Android, Linux or Windows.
|
# Enable SDL for default on operating systems that aren't OSX, Android, Linux or Windows.
|
||||||
if(NOT APPLE AND NOT ANDROID AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND NOT MSVC)
|
if(NOT APPLE AND NOT ANDROID AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND NOT MSVC)
|
||||||
|
@ -380,6 +381,15 @@ if(ANDROID)
|
||||||
set(USE_EGL 1)
|
set(USE_EGL 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_HEADLESS)
|
||||||
|
message("Enabling Headless! Disabling GUI, force enabling EGL!")
|
||||||
|
set(USE_X11 0)
|
||||||
|
set(USE_EGL 1)
|
||||||
|
set(DISABLE_WX 1)
|
||||||
|
set(ENABLE_QT2 0)
|
||||||
|
add_definitions(-DUSE_HEADLESS)
|
||||||
|
endif()
|
||||||
|
|
||||||
include_directories(Externals/GL)
|
include_directories(Externals/GL)
|
||||||
|
|
||||||
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
|
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
|
||||||
|
@ -457,7 +467,7 @@ if(NOT ANDROID)
|
||||||
|
|
||||||
set(USE_X11 0)
|
set(USE_X11 0)
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE AND NOT ENABLE_HEADLESS)
|
||||||
include(FindX11)
|
include(FindX11)
|
||||||
if(TRY_X11 AND X11_FOUND)
|
if(TRY_X11 AND X11_FOUND)
|
||||||
set(USE_X11 1)
|
set(USE_X11 1)
|
||||||
|
|
|
@ -27,7 +27,7 @@ protected:
|
||||||
EGLContext egl_ctx;
|
EGLContext egl_ctx;
|
||||||
EGLDisplay egl_dpy;
|
EGLDisplay egl_dpy;
|
||||||
|
|
||||||
virtual EGLDisplay OpenDisplay() { return EGL_NO_DISPLAY; }
|
virtual EGLDisplay OpenDisplay() { return eglGetDisplay(EGL_DEFAULT_DISPLAY); }
|
||||||
virtual EGLNativeWindowType InitializePlatform(EGLNativeWindowType host_window, EGLConfig config) { return (EGLNativeWindowType)EGL_DEFAULT_DISPLAY; }
|
virtual EGLNativeWindowType InitializePlatform(EGLNativeWindowType host_window, EGLConfig config) { return (EGLNativeWindowType)EGL_DEFAULT_DISPLAY; }
|
||||||
virtual void ShutdownPlatform() {}
|
virtual void ShutdownPlatform() {}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
#else
|
#else
|
||||||
#include "Common/GL/GLInterface/GLX.h"
|
#include "Common/GL/GLInterface/GLX.h"
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(USE_EGL) && USE_EGL && defined(USE_HEADLESS)
|
||||||
|
#include "Common/GL/GLInterface/EGL.h"
|
||||||
#else
|
#else
|
||||||
#error Platform doesnt have a GLInterface
|
#error Platform doesnt have a GLInterface
|
||||||
#endif
|
#endif
|
||||||
|
@ -30,6 +32,8 @@ std::unique_ptr<cInterfaceBase> HostGL_CreateGLInterface()
|
||||||
return std::make_unique<cInterfaceAGL>();
|
return std::make_unique<cInterfaceAGL>();
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
return std::make_unique<cInterfaceWGL>();
|
return std::make_unique<cInterfaceWGL>();
|
||||||
|
#elif defined(USE_EGL) && defined(USE_HEADLESS)
|
||||||
|
return std::make_unique<cInterfaceEGL>();
|
||||||
#elif defined(HAVE_X11) && HAVE_X11
|
#elif defined(HAVE_X11) && HAVE_X11
|
||||||
#if defined(USE_EGL) && USE_EGL
|
#if defined(USE_EGL) && USE_EGL
|
||||||
return std::make_unique<cInterfaceEGLX11>();
|
return std::make_unique<cInterfaceEGLX11>();
|
||||||
|
|
|
@ -194,7 +194,7 @@ if(wxWidgets_FOUND)
|
||||||
set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} ${DOLPHIN_EXE})
|
set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} ${DOLPHIN_EXE})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(USE_X11)
|
if(USE_X11 OR ENABLE_HEADLESS)
|
||||||
set(DOLPHIN_NOGUI_EXE ${DOLPHIN_EXE_BASE}-nogui)
|
set(DOLPHIN_NOGUI_EXE ${DOLPHIN_EXE_BASE}-nogui)
|
||||||
add_executable(${DOLPHIN_NOGUI_EXE} ${SRCS} ${NOGUI_SRCS})
|
add_executable(${DOLPHIN_NOGUI_EXE} ${SRCS} ${NOGUI_SRCS})
|
||||||
target_link_libraries(${DOLPHIN_NOGUI_EXE} ${LIBS})
|
target_link_libraries(${DOLPHIN_NOGUI_EXE} ${LIBS})
|
||||||
|
|
|
@ -35,11 +35,11 @@ static bool running = true;
|
||||||
class Platform
|
class Platform
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Init() = 0;
|
virtual void Init() {}
|
||||||
virtual void SetTitle(const std::string &title) = 0;
|
virtual void SetTitle(const std::string &title) {}
|
||||||
virtual void MainLoop() = 0;
|
virtual void MainLoop() { while(running) {} }
|
||||||
virtual void Shutdown() = 0;
|
virtual void Shutdown() {}
|
||||||
virtual ~Platform() {};
|
virtual ~Platform() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
static Platform* platform;
|
static Platform* platform;
|
||||||
|
@ -54,7 +54,7 @@ void Host_Message(int Id)
|
||||||
running = false;
|
running = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void* s_window_handle;
|
static void* s_window_handle = nullptr;
|
||||||
void* Host_GetRenderHandle()
|
void* Host_GetRenderHandle()
|
||||||
{
|
{
|
||||||
return s_window_handle;
|
return s_window_handle;
|
||||||
|
@ -291,7 +291,9 @@ class PlatformX11 : public Platform
|
||||||
|
|
||||||
static Platform* GetPlatform()
|
static Platform* GetPlatform()
|
||||||
{
|
{
|
||||||
#if HAVE_X11
|
#if defined(USE_EGL) && defined(USE_HEADLESS)
|
||||||
|
return new Platform();
|
||||||
|
#elif HAVE_X11
|
||||||
return new PlatformX11();
|
return new PlatformX11();
|
||||||
#endif
|
#endif
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
Loading…
Reference in New Issue