X-Git-Url: https://git.ralfj.de/gltest.git/blobdiff_plain/92d3b1692f11658cad027cd597019eabd65faf89..8a26468f18f8efc86767cacccbb7493a87858098:/eglbackend.cpp?ds=sidebyside diff --git a/eglbackend.cpp b/eglbackend.cpp index 04165c7..e2f9787 100644 --- a/eglbackend.cpp +++ b/eglbackend.cpp @@ -49,13 +49,21 @@ static void exitEglError(const char *what) exit(1); } -/* attributes for a double buffered visual in RGBA format with at least -* 4 bits per color */ +static const EGLint context_attribs[] = { +#ifdef USE_GLES + EGL_CONTEXT_CLIENT_VERSION, 2, +#endif + EGL_NONE +}; static const EGLint config_attribs[] = { EGL_RED_SIZE, 4, EGL_GREEN_SIZE, 4, EGL_BLUE_SIZE, 4, +#ifdef USE_GLES + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, +#else EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, +#endif EGL_NONE, }; @@ -65,16 +73,25 @@ VisualID EGLBackend::initialize(Display *xDisplay) // get connection and bind API EGLint eglMajor, eglMinor; display = eglGetDisplay(xDisplay); - if (display == EGL_NO_DISPLAY) + if (display == EGL_NO_DISPLAY) exitEglError("Failed to get EGL display"); - if (eglInitialize(display, &eglMajor, &eglMinor) == EGL_FALSE) + if (eglInitialize(display, &eglMajor, &eglMinor) == EGL_FALSE) exitEglError("Failed to initialize EGL"); printf("Using EGL version %d.%d\n", eglMajor, eglMinor); - eglBindAPI(EGL_OPENGL_API); + if (eglMajor == 1 && eglMinor < 3) { + fprintf(stderr, "Need at least EGL 1.3 to function properly\n"); + exit(1); + } +#ifdef USE_GLES + if (eglBindAPI(EGL_OPENGL_ES_API) == EGL_FALSE) +#else + if (eglBindAPI(EGL_OPENGL_API) == EGL_FALSE) +#endif + exitEglError("Failed to bind API"); // get an appropriate config EGLConfig configs[1]; EGLint count; - if (eglChooseConfig(display, config_attribs, configs, 1, &count) == EGL_FALSE || count == 0) + if (eglChooseConfig(display, config_attribs, configs, 1, &count) == EGL_FALSE || count == 0) exitEglError("Failed to choose config"); config = configs[0]; } @@ -88,8 +105,8 @@ void EGLBackend::createContext(Window window) { assert(display != EGL_NO_DISPLAY && context == EGL_NO_CONTEXT); surface = eglCreateWindowSurface(display, config, window, NULL); - /* create an EGL context and use it with the surface */ - context = eglCreateContext(display, config, EGL_NO_CONTEXT, NULL); + // create an EGL context and use it with the surface + context = eglCreateContext(display, config, EGL_NO_CONTEXT, context_attribs); if (context == EGL_NO_CONTEXT) exitEglError("Failed to create context"); if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE)