From 1d47f0c5d8751e60b54346f6c929bd31c5aa9559 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 15 Oct 2019 17:58:13 +0200 Subject: [PATCH] app/internal/window: fall back to OpenGL ES 2 if 3 is unavailable Systems that only support ES 2 are unlikely to have the required extensions available. But we'll get a better exit error in that case. Signed-off-by: Elias Naur --- app/internal/window/egl.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app/internal/window/egl.go b/app/internal/window/egl.go index ee48b602..1b03aa7b 100644 --- a/app/internal/window/egl.go +++ b/app/internal/window/egl.go @@ -220,18 +220,25 @@ func createContext(disp _EGLNativeDisplayType) (*eglContext, error) { if eglCfg == nilEGLConfig { return nil, errors.New("eglChooseConfig returned 0 configs") } - var eglCtx _EGLContext + visID, ret := eglGetConfigAttrib(eglDisp, eglCfg, _EGL_NATIVE_VISUAL_ID) + if !ret { + return nil, errors.New("newContext: eglGetConfigAttrib for _EGL_NATIVE_VISUAL_ID failed") + } ctxAttribs := []_EGLint{ _EGL_CONTEXT_CLIENT_VERSION, 3, _EGL_NONE, } - eglCtx = eglCreateContext(eglDisp, eglCfg, nilEGLContext, ctxAttribs) + eglCtx := eglCreateContext(eglDisp, eglCfg, nilEGLContext, ctxAttribs) if eglCtx == nilEGLContext { - return nil, fmt.Errorf("eglCreateContext failed: 0x%x", eglGetError()) - } - visID, ret := eglGetConfigAttrib(eglDisp, eglCfg, _EGL_NATIVE_VISUAL_ID) - if !ret { - return nil, errors.New("newContext: eglGetConfigAttrib for _EGL_NATIVE_VISUAL_ID failed") + // Fall back to OpenGL ES 2 and rely on extensions. + ctxAttribs := []_EGLint{ + _EGL_CONTEXT_CLIENT_VERSION, 2, + _EGL_NONE, + } + eglCtx = eglCreateContext(eglDisp, eglCfg, nilEGLContext, ctxAttribs) + if eglCtx == nil { + return nil, fmt.Errorf("eglCreateContext failed: 0x%x", eglGetError()) + } } return &eglContext{ disp: eglDisp,