1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| bool initializeEGL(EGLNativeDisplayType nativedisplay, EGLNativeWindowType nativewindow, EGLDisplay *display, EGLContext *context, EGLSurface *surface) { *display = eglGetDisplay(nativedisplay); if (*display == EGL_NO_DISPLAY) { fprintf(stderr, "eglGetDisplay failed: %d\n", eglGetError()); return false; }
if (!eglInitialize(*display, nullptr, nullptr)) { fprintf(stderr, "eglInitialize failed: %d\n", eglGetError()); return false; }
EGLint attr[] = { EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, EGL_COLOR_BUFFER_TYPE, EGL_RGB_BUFFER, EGL_BUFFER_SIZE, 32, EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_ALPHA_SIZE, 8, EGL_NONE}; EGLConfig config = nullptr; EGLint numConfigs = 0; if (!eglChooseConfig(*display, attr, &config, 1, &numConfigs)) { fprintf(stderr, "eglChooseConfig failed: %d\n", eglGetError()); return false; } if (numConfigs != 1) { fprintf(stderr, "eglChooseConfig failed (numConfigs must be 1 but %d): %d\n", numConfigs, eglGetError()); return false; }
*surface = eglCreateWindowSurface(*display, config, nativewindow, nullptr); if (*surface == EGL_NO_SURFACE) { fprintf(stderr, "eglCreateWindowSurface failed: %d\n", eglGetError()); return false; }
EGLint ctxattr[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE}; *context = eglCreateContext(*display, config, EGL_NO_CONTEXT, ctxattr); if (*context == EGL_NO_CONTEXT) { fprintf(stderr, "eglCreateContext failed: %d\n", eglGetError()); return false; }
if (!eglMakeCurrent(*display, *surface, *surface, *context)) { fprintf(stderr, "eglMakeCurrent failed: %d\n", eglGetError()); return false; }
return true; }
|