GLUSvoid GLUSAPIENTRY glusWindowDestroy(GLUSvoid) { glusEGLTerminate(&g_eglDisplay, &g_eglContext, &g_eglSurface); _glusOsDestroyNativeWindowDisplay(); g_windowCreated = GLUS_FALSE; g_initdone = GLUS_FALSE; }
EGLBoolean GLUSAPIENTRY glusEGLCreateWindowSurfaceMakeCurrent(EGLNativeWindowType eglNativeWindowType, EGLDisplay* eglDisplay, EGLConfig* eglConfig, EGLContext* eglContext, EGLSurface* eglSurface) { EGLDisplay surface = EGL_NO_SURFACE; if (!eglDisplay || !eglConfig || !eglContext || !eglSurface) { glusLogPrint(GLUS_LOG_ERROR, "No eglDisplay, eglConfig, eglContext or eglSurface passed"); return EGL_FALSE; } // Create a surface surface = eglCreateWindowSurface(*eglDisplay, *eglConfig, (EGLNativeWindowType) eglNativeWindowType, 0); if (surface == EGL_NO_SURFACE) { glusLogPrint(GLUS_LOG_ERROR, "Could not create EGL window surface"); glusEGLTerminate(eglDisplay, eglContext, 0); return EGL_FALSE; } // Make the context current if (!eglMakeCurrent(*eglDisplay, surface, surface, *eglContext)) { glusLogPrint(GLUS_LOG_ERROR, "Could not set EGL context as current"); glusEGLTerminate(eglDisplay, eglContext, 0); return EGL_FALSE; } *eglSurface = surface; return EGL_TRUE; }
EGLBoolean GLUSAPIENTRY glusEGLCreateContext(EGLNativeDisplayType eglNativeDisplayType, EGLDisplay* eglDisplay, EGLConfig* eglConfig, EGLContext *eglContext, const EGLint attribList[], const EGLint eglContextClientVersion) { EGLint numConfigs; EGLint majorVersion; EGLint minorVersion; EGLDisplay display = EGL_NO_DISPLAY; EGLConfig config = 0; EGLDisplay context = EGL_NO_CONTEXT; EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, GLUS_DEFAULT_CLIENT_VERSION, EGL_NONE, EGL_NONE }; if (!eglDisplay || !eglConfig || !eglContext) { glusLogPrint(GLUS_LOG_ERROR, "No eglDisplay, eglConfig or eglContext passed"); return EGL_FALSE; } // Get Display display = eglGetDisplay((EGLNativeDisplayType) eglNativeDisplayType); if (display == EGL_NO_DISPLAY) { glusLogPrint(GLUS_LOG_ERROR, "Could not get EGL display"); return EGL_FALSE; } // Initialize EGL if (!eglInitialize(display, &majorVersion, &minorVersion)) { glusLogPrint(GLUS_LOG_ERROR, "Could not initialize EGL"); glusEGLTerminate(display, 0, 0); return EGL_FALSE; } glusLogPrint(GLUS_LOG_INFO, "EGL version: %d.%d", majorVersion, minorVersion); // Choose config if (!eglChooseConfig(display, attribList, &config, 1, &numConfigs)) { glusLogPrint(GLUS_LOG_ERROR, "Could not choose EGL configuration"); glusEGLTerminate(display, 0, 0); return EGL_FALSE; } if (numConfigs == 0) { glusLogPrint(GLUS_LOG_ERROR, "Could no EGL configuration returned"); glusEGLTerminate(display, 0, 0); return EGL_FALSE; } contextAttribs[1] = eglContextClientVersion; // Create a GL ES context context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs); if (context == EGL_NO_CONTEXT) { glusLogPrint(GLUS_LOG_ERROR, "Could not create EGL context. EGL context client version: %d", eglContextClientVersion); glusEGLTerminate(eglDisplay, 0, 0); return EGL_FALSE; } glusLogPrint(GLUS_LOG_INFO, "EGL context client version: %d", eglContextClientVersion); *eglDisplay = display; *eglConfig = config; *eglContext = context; return EGL_TRUE; }