OpenGL (Android): request GLES 2+

This commit is contained in:
李通洲 2025-01-08 15:38:55 +08:00
parent 90068ab474
commit 934b6291e3
No known key found for this signature in database
GPG Key ID: 269AD4F5325A22A3

View File

@ -3,7 +3,7 @@
#if __has_include(<GL/gl.h>) #if __has_include(<GL/gl.h>)
#include <GL/gl.h> #include <GL/gl.h>
#elif __has_include(<OpenGL/gl.h>) #elif __APPLE__
#define GL_SILENCE_DEPRECATION 1 #define GL_SILENCE_DEPRECATION 1
#include <OpenGL/gl.h> #include <OpenGL/gl.h>
#else #else
@ -64,9 +64,12 @@ static const char* eglHandleContext(FFOpenGLResult* result, EGLData* data)
return NULL; return NULL;
} }
static const char* eglHandleSurface(FFOpenGLResult* result, EGLData* data) static const char* eglHandleSurface(FFOpenGLResult* result, EGLData* data, bool gles)
{ {
data->context = data->ffeglCreateContext(data->display, data->config, EGL_NO_CONTEXT, (EGLint[]){EGL_NONE}); data->context = data->ffeglCreateContext(data->display, data->config, EGL_NO_CONTEXT, (EGLint[]){
EGL_CONTEXT_CLIENT_VERSION, gles ? 2 : 1,
EGL_NONE
});
if(data->context == EGL_NO_CONTEXT) if(data->context == EGL_NO_CONTEXT)
return "eglCreateContext returned EGL_NO_CONTEXT"; return "eglCreateContext returned EGL_NO_CONTEXT";
@ -78,10 +81,11 @@ static const char* eglHandleSurface(FFOpenGLResult* result, EGLData* data)
static const char* eglHandleDisplay(FFOpenGLResult* result, EGLData* data) static const char* eglHandleDisplay(FFOpenGLResult* result, EGLData* data)
{ {
// try use OpenGL API. If failed, use the default API (usually OpenGL ES) // try use OpenGL API. If failed, use the default API (usually OpenGL ES)
data->ffeglBindAPI(EGL_OPENGL_API); bool gles = !data->ffeglBindAPI(EGL_OPENGL_API);
EGLint eglConfigCount; EGLint eglConfigCount;
data->ffeglGetConfigs(data->display, &data->config, 1, &eglConfigCount); data->ffeglGetConfigs(data->display, &data->config, 1, &eglConfigCount);
if(eglConfigCount == 0) if(eglConfigCount == 0)
return "eglGetConfigs returned 0 configs"; return "eglGetConfigs returned 0 configs";
@ -94,7 +98,7 @@ static const char* eglHandleDisplay(FFOpenGLResult* result, EGLData* data)
if(data->surface == EGL_NO_SURFACE) if(data->surface == EGL_NO_SURFACE)
return "eglCreatePbufferSurface returned EGL_NO_SURFACE"; return "eglCreatePbufferSurface returned EGL_NO_SURFACE";
const char* error = eglHandleSurface(result, data); const char* error = eglHandleSurface(result, data, gles);
data->ffeglDestroySurface(data->display, data->surface); data->ffeglDestroySurface(data->display, data->surface);
return error; return error;
} }
@ -148,7 +152,7 @@ const char* ffOpenGLDetectByEGL(FFOpenGLResult* result)
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(egl, eglData, eglDestroySurface); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(egl, eglData, eglDestroySurface);
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(egl, eglData, eglTerminate); FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(egl, eglData, eglTerminate);
FF_SUPPRESS_IO(); // FF_SUPPRESS_IO();
return eglHandleData(result, &eglData); return eglHandleData(result, &eglData);
} }