From c668921a45b7a7f5f548d0e09836f143f56b4ae0 Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 31 Oct 2021 17:16:02 +0200 Subject: [PATCH] sdl: don't try gl on remote displays --- gl.c | 5 +++++ gl.h | 8 ++++++-- plat_sdl.c | 18 +++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/gl.c b/gl.c index 2ebb87c..0e18c45 100644 --- a/gl.c +++ b/gl.c @@ -131,6 +131,11 @@ out: return retval; } +void gl_announce(void) +{ + printf("GL_RENDERER: %s\n", (char *)glGetString(GL_RENDERER)); +} + static float vertices[] = { -1.0f, 1.0f, 0.0f, // 0 0 1 1.0f, 1.0f, 0.0f, // 1 ^ diff --git a/gl.h b/gl.h index cb48071..8b7d43c 100644 --- a/gl.h +++ b/gl.h @@ -3,8 +3,9 @@ #ifdef HAVE_GLES -int gl_init(void *display, void *window, int *quirks); -int gl_flip(const void *fb, int w, int h); +int gl_init(void *display, void *window, int *quirks); +void gl_announce(void); +int gl_flip(const void *fb, int w, int h); void gl_finish(void); /* for external flips */ @@ -17,6 +18,9 @@ static __inline int gl_init(void *display, void *window, int *quirks) { return -1; } +static void gl_announce(void) +{ +} static __inline int gl_flip(const void *fb, int w, int h) { return -1; diff --git a/plat_sdl.c b/plat_sdl.c index db39bf2..6510fc1 100644 --- a/plat_sdl.c +++ b/plat_sdl.c @@ -186,9 +186,11 @@ int plat_sdl_init(void) static const char *vout_list[] = { NULL, NULL, NULL, NULL, NULL }; const SDL_VideoInfo *info; SDL_SysWMinfo wminfo; + const char *env; int overlay_works = 0; int gl_works = 0; int i, ret, h; + int try_gl; ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE); if (ret != 0) { @@ -274,8 +276,22 @@ int plat_sdl_init(void) (void)wminfo; #endif - ret = gl_init(display, window, &gl_quirks); + ret = -1; + try_gl = 1; + env = getenv("DISPLAY"); + if (env && env[0] != ':') { + fprintf(stderr, "looks like a remote DISPLAY, " + "not trying GL (use PICOFE_GL=1 to override)\n"); + // because some drivers just kill the program with no way to recover + try_gl = 0; + } + env = getenv("PICOFE_GL"); + if (env) + try_gl = atoi(env); + if (try_gl) + ret = gl_init(display, window, &gl_quirks); if (ret == 0) { + gl_announce(); gl_works = 1; gl_finish(); } -- 2.39.2