From 996466e855fc7c97f349f2352eb9fbab5c35384e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carl=20=C3=85stholm?= <[EMAIL REDACTED]>
Date: Tue, 25 Mar 2025 01:16:20 +0100
Subject: [PATCH] Check if GL_OES_EGL_image_external is supported before trying
to use it
(cherry picked from commit dd9b9d451330d2dd11c9e09f90f3fc6f3fa7021b)
---
src/render/opengles2/SDL_render_gles2.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c
index 788259f2fde0e..d15f4f020eb77 100644
--- a/src/render/opengles2/SDL_render_gles2.c
+++ b/src/render/opengles2/SDL_render_gles2.c
@@ -170,6 +170,7 @@ typedef struct GLES2_RenderData
bool debug_enabled;
+ bool GL_OES_EGL_image_external_supported;
bool GL_EXT_blend_minmax_supported;
#define SDL_PROC(ret, func, params) ret (APIENTRY *func) params;
@@ -1580,9 +1581,12 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
#endif
#ifdef GL_TEXTURE_EXTERNAL_OES
case SDL_PIXELFORMAT_EXTERNAL_OES:
- format = GL_NONE;
- type = GL_NONE;
- break;
+ if (renderdata->GL_OES_EGL_image_external_supported) {
+ format = GL_NONE;
+ type = GL_NONE;
+ break;
+ }
+ SDL_FALLTHROUGH;
#endif
default:
return SDL_SetError("Texture format not supported");
@@ -2201,7 +2205,11 @@ static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21);
#endif
#ifdef GL_TEXTURE_EXTERNAL_OES
- if (GLES2_CacheShader(data, GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES, GL_FRAGMENT_SHADER)) {
+ if (SDL_GL_ExtensionSupported("GL_OES_EGL_image_external")) {
+ data->GL_OES_EGL_image_external_supported = true;
+ if (!GLES2_CacheShader(data, GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES, GL_FRAGMENT_SHADER)) {
+ goto error;
+ }
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_EXTERNAL_OES);
}
#endif