int initEGL(int n_buf) { #ifdef GLES_20 EGLint context_attr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE}; #else typedef NativeDisplayType EGLNativeDisplayType; typedef NativeWindowType EGLNativeWindowType; #endif EGLint disp_w, disp_h; EGLNativeDisplayType disp_type; EGLNativeWindowType window; EGLConfig cfgs[2]; EGLint n_cfgs; EGLint egl_attr[] = { EGL_BUFFER_SIZE, EGL_DONT_CARE, EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_DEPTH_SIZE, 8, #ifdef GLES_20 EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, #endif EGL_NONE }; #ifdef X11 if (initX11(&disp_w, &disp_h)) return -1; disp_type = (EGLNativeDisplayType)x11Display; window = (EGLNativeWindowType)x11Window; #else if (get_disp_resolution(&disp_w, &disp_h)) { printf("ERROR: get display resolution failed\n"); return -1; } printf("\n\nliuxu, 04/21/2014, get_disp_resolution, disp_w=%d, disp_h=%d\n\n", disp_w, disp_h); disp_type = (EGLNativeDisplayType)EGL_DEFAULT_DISPLAY; window = 0; #endif dpy = eglGetDisplay(disp_type); if (eglInitialize(dpy, NULL, NULL) != EGL_TRUE) { print_err("eglInitialize"); return -1; } if (eglGetConfigs(dpy, cfgs, 2, &n_cfgs) != EGL_TRUE) { print_err("eglGetConfigs"); goto cleanup; } if (eglChooseConfig(dpy, egl_attr, cfgs, 2, &n_cfgs) != EGL_TRUE) { print_err("eglChooseConfig"); goto cleanup; } surface = eglCreateWindowSurface(dpy, cfgs[0], window, NULL); if (surface == EGL_NO_SURFACE) { print_err("eglCreateWindowSurface"); goto cleanup; } #ifdef GLES_20 context = eglCreateContext(dpy, cfgs[0], EGL_NO_CONTEXT, context_attr); #else context = eglCreateContext(dpy, cfgs[0], EGL_NO_CONTEXT, NULL); #endif if (context == EGL_NO_CONTEXT) { print_err("eglCreateContext"); goto cleanup; } if (eglMakeCurrent(dpy, surface, surface, context) != EGL_TRUE) { print_err("eglMakeCurrent"); goto cleanup; } /* 0 - do not sync with video frame */ if (profiling == TRUE) { if (eglSwapInterval(dpy, 0) != EGL_TRUE) { print_err("eglSwapInterval"); goto cleanup; } } #ifndef GLES_20 glShadeModel(GL_FLAT); glTexParameterf(GL_TEXTURE_STREAM_IMG, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_STREAM_IMG, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFrontFace(GL_CW); glCullFace(GL_FRONT); glEnable(GL_CULL_FACE); glEnable(GL_NORMALIZE); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrthof(-CUBE_V_LEN * disp_w / disp_h, CUBE_V_LEN * disp_w / disp_h, -CUBE_V_LEN, CUBE_V_LEN, -CUBE_V_LEN * 2, CUBE_V_LEN * 2); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); #endif return 0; cleanup: deInitEGL(n_buf); #ifdef X11 deInitX11(); #endif return -1; }
int initEGL(int *surf_w, int *surf_h, int profile) { EGLint context_attr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE}; // typedef NativeDisplayType EGLNativeDisplayType; // typedef NativeWindowType EGLNativeWindowType; EGLint disp_w, disp_h; EGLNativeDisplayType disp_type; EGLNativeWindowType window; EGLConfig cfgs[2]; EGLint n_cfgs; EGLint egl_attr[] = { EGL_BUFFER_SIZE, EGL_DONT_CARE, #if 0 EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_DEPTH_SIZE, 8, #endif EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE }; if (get_disp_resolution(&disp_w, &disp_h)) { printf("ERROR: get display resolution failed\n"); return -1; } disp_type = (EGLNativeDisplayType)EGL_DEFAULT_DISPLAY; window = 0; dpy = eglGetDisplay(disp_type); if (eglInitialize(dpy, NULL, NULL) != EGL_TRUE) { print_err("eglInitialize"); return -1; } if (eglGetConfigs(dpy, cfgs, 2, &n_cfgs) != EGL_TRUE) { print_err("eglGetConfigs"); goto cleanup; } if (eglChooseConfig(dpy, egl_attr, cfgs, 2, &n_cfgs) != EGL_TRUE) { print_err("eglChooseConfig"); goto cleanup; } surface = eglCreateWindowSurface(dpy, cfgs[0], window, NULL); if (surface == EGL_NO_SURFACE) { print_err("eglCreateWindowSurface"); goto cleanup; } if (surf_w && surf_h) { *surf_w = disp_w; *surf_h = disp_h; } context = eglCreateContext(dpy, cfgs[0], EGL_NO_CONTEXT, context_attr); if (context == EGL_NO_CONTEXT) { print_err("eglCreateContext"); goto cleanup; } if (eglMakeCurrent(dpy, surface, surface, context) != EGL_TRUE) { print_err("eglMakeCurrent"); goto cleanup; } /* do not sync with video frame if profile enabled */ if (profile == 1) { if (eglSwapInterval(dpy, 0) != EGL_TRUE) { print_err("eglSwapInterval"); goto cleanup; } } return 0; cleanup: deInitEGL(); return -1; }