From bf53183c8bf5b2d01d015f4bcab3e4ca1acdadb4 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 13 Jan 2023 14:20:57 -0800 Subject: [PATCH] Fixed building on Raspberry Pi --- cmake/sdlchecks.cmake | 7 +++++-- include/SDL3/SDL_egl.h | 6 +++--- src/video/SDL_egl_c.h | 31 ++++++++++++++++++++++++++++ src/video/raspberry/SDL_rpimouse.c | 5 ----- src/video/raspberry/SDL_rpivideo.h | 4 +--- src/video/vivante/SDL_vivantevideo.h | 4 ++++ 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake index 3037a6329c..a1e55365ad 100644 --- a/cmake/sdlchecks.cmake +++ b/cmake/sdlchecks.cmake @@ -670,6 +670,7 @@ macro(CheckVivante) find_library(VIVANTE_VDK_LIBRARY VDK REQUIRED) list(APPEND SDL_EXTRA_LIBS ${VIVANTE_LIBRARY} ${VIVANTE_VDK_LIBRARY}) else() + list(APPEND SDL_PC_CFLAGS -DLINUX -DEGL_API_FB) list(APPEND SDL_EXTRA_LIBS EGL) endif(HAVE_VIVANTE_VDK) endif() @@ -1095,7 +1096,9 @@ macro(CheckRPI) set(VIDEO_RPI_LDFLAGS "-Wl,-rpath,/opt/vc/lib") endif() listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + separate_arguments(VIDEO_RPI_INCLUDE_FLAGS) listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + separate_arguments(VIDEO_RPI_LIBRARY_FLAGS) cmake_push_check_state() set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") @@ -1115,8 +1118,8 @@ macro(CheckRPI) file(GLOB VIDEO_RPI_SOURCES ${SDL3_SOURCE_DIR}/src/video/raspberry/*.c) list(APPEND SOURCE_FILES ${VIDEO_RPI_SOURCES}) list(APPEND SDL_EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) - target_compile_options(sdl-build-options INTERFACE ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}) - list(APPEND SDL_EXTRA_LDFLAGS ${VIDEO_RPI_LDFLAGS}) + target_compile_options(sdl-build-options INTERFACE ${VIDEO_RPI_INCLUDE_FLAGS}) + list(APPEND SDL_EXTRA_LDFLAGS ${VIDEO_RPI_LIBRARY_FLAGS} ${VIDEO_RPI_LDFLAGS}) endif() endif() endmacro() diff --git a/include/SDL3/SDL_egl.h b/include/SDL3/SDL_egl.h index 73d3e13956..6f51c0831a 100644 --- a/include/SDL3/SDL_egl.h +++ b/include/SDL3/SDL_egl.h @@ -24,7 +24,7 @@ * * This is a simple file to encapsulate the EGL API headers. */ -#ifdef SDL_USE_SYSTEM_EGL_HEADERS +#if !defined(_MSC_VER) && !defined(__ANDROID__) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) #if defined(__vita__) || defined(__psp2__) #include @@ -33,7 +33,7 @@ #include #include -#else /* !SDL_USE_SYSTEM_EGL_HEADERS */ +#else /* _MSC_VER */ /* EGL headers for Visual Studio */ @@ -2349,4 +2349,4 @@ EGLAPI struct wl_buffer *EGLAPIENTRY eglCreateWaylandBufferFromImageWL (EGLDispl #endif /* __eglext_h_ */ -#endif /* SDL_USE_SYSTEM_EGL_HEADERS */ +#endif /* _MSC_VER */ diff --git a/src/video/SDL_egl_c.h b/src/video/SDL_egl_c.h index b0be4524d2..cd4b02c2a6 100644 --- a/src/video/SDL_egl_c.h +++ b/src/video/SDL_egl_c.h @@ -31,6 +31,37 @@ #define SDL_EGL_MAX_DEVICES 8 +/* For systems that don't define these */ +typedef intptr_t EGLAttrib; +typedef void *EGLDeviceEXT; +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint *major, EGLint *minor); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLTERMINATEPROC) (EGLDisplay dpy); +typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP PFNEGLGETPROCADDRESSPROC) (const char *procname); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); +typedef EGLContext (EGLAPIENTRYP PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITNATIVEPROC) (EGLint engine); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITGLPROC) (void); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDAPIPROC) (EGLenum api); +typedef EGLint (EGLAPIENTRYP PFNEGLGETERRORPROC) (void); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); + typedef struct SDL_EGL_VideoData { void *opengl_dll_handle, *egl_dll_handle; diff --git a/src/video/raspberry/SDL_rpimouse.c b/src/video/raspberry/SDL_rpimouse.c index d85bd3bf5c..205beb216b 100644 --- a/src/video/raspberry/SDL_rpimouse.c +++ b/src/video/raspberry/SDL_rpimouse.c @@ -277,11 +277,6 @@ static int RPI_WarpMouseGlobalGraphically(float x, float y) static int RPI_WarpMouseGlobal(float x, float y) { - RPI_CursorData *curdata; - DISPMANX_UPDATE_HANDLE_T update; - int ret; - VC_RECT_T dst_rect; - VC_RECT_T src_rect; SDL_Mouse *mouse = SDL_GetMouse(); if (mouse == NULL || mouse->cur_cursor == NULL || mouse->cur_cursor->driverdata == NULL) { diff --git a/src/video/raspberry/SDL_rpivideo.h b/src/video/raspberry/SDL_rpivideo.h index 04ad0af4c7..6fff482ea4 100644 --- a/src/video/raspberry/SDL_rpivideo.h +++ b/src/video/raspberry/SDL_rpivideo.h @@ -26,9 +26,7 @@ #include "../SDL_sysvideo.h" #include -#include "GLES/gl.h" -#include "EGL/egl.h" -#include "EGL/eglext.h" +#include typedef struct SDL_VideoData { diff --git a/src/video/vivante/SDL_vivantevideo.h b/src/video/vivante/SDL_vivantevideo.h index dbbd8c1065..ea2cdc4062 100644 --- a/src/video/vivante/SDL_vivantevideo.h +++ b/src/video/vivante/SDL_vivantevideo.h @@ -25,6 +25,10 @@ #include "../SDL_sysvideo.h" +/* Set up definitions for Vivante EGL */ +#define LINUX +#define EGL_API_FB + #include #if SDL_VIDEO_DRIVER_VIVANTE_VDK