Loading include/ui/EGLUtils.h +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ class EGLUtils { public: static const char *strerror(EGLint err); static status_t selectConfigForPixelFormat( EGLDisplay dpy, EGLint const* attrs, Loading libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp +15 −36 Original line number Diff line number Diff line Loading @@ -42,28 +42,6 @@ using namespace android; static __attribute__((noinline)) const char *egl_strerror(EGLint err) { switch (err){ case EGL_SUCCESS: return "EGL_SUCCESS"; case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; default: return "UNKNOWN"; } } static __attribute__((noinline)) void checkGLErrors() Loading @@ -80,7 +58,7 @@ void checkEGLErrors(const char* token) // GLESonGL seems to be returning 0 when there is no errors? if (error && error != EGL_SUCCESS) LOGE("%s error 0x%04x (%s)", token, int(error), egl_strerror(error)); token, int(error), EGLUtils::strerror(error)); } Loading Loading @@ -112,28 +90,22 @@ PixelFormat DisplayHardware::getFormat() const { return mFormat; } void DisplayHardware::init(uint32_t dpy) { hw_module_t const* module; mNativeWindow = new FramebufferNativeWindow(); framebuffer_device_t const * fbDev = mNativeWindow->getDevice(); mOverlayEngine = NULL; hw_module_t const* module; if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) { overlay_control_open(module, &mOverlayEngine); } framebuffer_device_t const * fbDev = mNativeWindow->getDevice(); PixelFormatInfo fbFormatInfo; getPixelFormatInfo(PixelFormat(fbDev->format), &fbFormatInfo); // initialize EGL const EGLint attribs[] = { EGL_BUFFER_SIZE, fbFormatInfo.bitsPerPixel, EGL_DEPTH_SIZE, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_NONE }; EGLint w, h, dummy; EGLint numConfigs=0, n=0; EGLint numConfigs=0; EGLSurface surface; EGLContext context; mFlags = 0; Loading @@ -146,10 +118,16 @@ void DisplayHardware::init(uint32_t dpy) eglGetConfigs(display, NULL, 0, &numConfigs); EGLConfig config; status_t err = EGLUtils::selectConfigForPixelFormat( display, attribs, fbDev->format, &config); status_t err = EGLUtils::selectConfigForNativeWindow( display, attribs, mNativeWindow.get(), &config); LOGE_IF(err, "couldn't find an EGLConfig matching the screen format"); EGLint r,g,b,a; eglGetConfigAttrib(display, config, EGL_RED_SIZE, &r); eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &a); /* * Gather EGL extensions */ Loading @@ -163,6 +141,7 @@ void DisplayHardware::init(uint32_t dpy) LOGI("version : %s", eglQueryString(display, EGL_VERSION)); LOGI("extensions: %s", egl_extensions); LOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported"); LOGI("EGLSurface: %d-%d-%d-%d, config=%p", r, g, b, a, config); if (mNativeWindow->isUpdateOnDemand()) { Loading libs/ui/EGLUtils.cpp +36 −5 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #define LOG_TAG "EGLUtils" #include <cutils/log.h> #include <utils/Errors.h> #include <ui/EGLUtils.h> Loading @@ -29,6 +30,28 @@ namespace android { // ---------------------------------------------------------------------------- const char *EGLUtils::strerror(EGLint err) { switch (err){ case EGL_SUCCESS: return "EGL_SUCCESS"; case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; default: return "UNKNOWN"; } } status_t EGLUtils::selectConfigForPixelFormat( EGLDisplay dpy, EGLint const* attrs, Loading @@ -37,6 +60,9 @@ status_t EGLUtils::selectConfigForPixelFormat( { EGLint numConfigs = -1, n=0; if (!attrs) return BAD_VALUE; if (outConfig == NULL) return BAD_VALUE; Loading Loading @@ -65,12 +91,13 @@ status_t EGLUtils::selectConfigForPixelFormat( EGLConfig config = NULL; for (i=0 ; i<n ; i++) { EGLint r,g,b,a; eglGetConfigAttrib(dpy, configs[i], EGL_RED_SIZE, &r); eglGetConfigAttrib(dpy, configs[i], EGL_GREEN_SIZE, &g); eglGetConfigAttrib(dpy, configs[i], EGL_BLUE_SIZE, &b); eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &a); EGLConfig curr = configs[i]; eglGetConfigAttrib(dpy, curr, EGL_RED_SIZE, &r); eglGetConfigAttrib(dpy, curr, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(dpy, curr, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(dpy, curr, EGL_ALPHA_SIZE, &a); if (fbSzA == a && fbSzR == r && fbSzG == g && fbSzB == b) { config = configs[i]; config = curr; break; } } Loading @@ -93,6 +120,10 @@ status_t EGLUtils::selectConfigForNativeWindow( { int err; int format; if (!window) return BAD_VALUE; if ((err = window->query(window, NATIVE_WINDOW_FORMAT, &format)) < 0) { return err; } Loading libs/ui/FramebufferNativeWindow.cpp +32 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <cutils/log.h> #include <cutils/atomic.h> #include <utils/threads.h> #include <utils/RefBase.h> #include <ui/SurfaceComposerClient.h> #include <ui/Rect.h> Loading Loading @@ -81,10 +82,16 @@ FramebufferNativeWindow::FramebufferNativeWindow() hw_module_t const* module; if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) { int stride; framebuffer_open(module, &fbDev); gralloc_open(module, &grDev); int err; err = framebuffer_open(module, &fbDev); LOGE_IF(err, "couldn't open framebuffer HAL (%s)", strerror(-err)); err = gralloc_open(module, &grDev); LOGE_IF(err, "couldn't open gralloc HAL (%s)", strerror(-err)); // bail out if we can't initialize the modules if (!fbDev || !grDev) return; mUpdateOnDemand = (fbDev->setUpdateRect != 0); Loading Loading @@ -127,12 +134,20 @@ FramebufferNativeWindow::FramebufferNativeWindow() android_native_window_t::query = query; } FramebufferNativeWindow::~FramebufferNativeWindow() { FramebufferNativeWindow::~FramebufferNativeWindow() { if (grDev) { if (buffers[0] != NULL) grDev->free(grDev, buffers[0]->handle); if (buffers[1] != NULL) grDev->free(grDev, buffers[1]->handle); gralloc_close(grDev); } if (fbDev) { framebuffer_close(fbDev); } } status_t FramebufferNativeWindow::setUpdateRectangle(const Rect& r) { Loading Loading @@ -216,6 +231,7 @@ int FramebufferNativeWindow::query(android_native_window_t* window, *value = fb->format; return NO_ERROR; } *value = 0; return BAD_VALUE; } Loading @@ -223,9 +239,16 @@ int FramebufferNativeWindow::query(android_native_window_t* window, }; // namespace android // ---------------------------------------------------------------------------- using namespace android; EGLNativeWindowType android_createDisplaySurface(void) { return new android::FramebufferNativeWindow(); FramebufferNativeWindow* w; w = new FramebufferNativeWindow(); if (w->getDevice() == NULL) { // get a ref so it can be destroyed when we exit this block sp<FramebufferNativeWindow> ref(w); return NULL; } return (EGLNativeWindowType)w; } opengl/tests/swapinterval/swapinterval.cpp +101 −85 Original line number Diff line number Diff line Loading @@ -15,8 +15,6 @@ ** limitations under the License. */ #define LOG_TAG "fillrate" #include <stdlib.h> #include <stdio.h> Loading @@ -33,7 +31,7 @@ using namespace android; int main(int argc, char** argv) { EGLint configAttribs[] = { EGL_DEPTH_SIZE, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_NONE }; Loading @@ -41,12 +39,15 @@ int main(int argc, char** argv) EGLint minorVersion; EGLContext context; EGLConfig config; EGLint numConfigs=0; EGLSurface surface; EGLint w, h; EGLDisplay dpy; dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(dpy, &majorVersion, &minorVersion); eglInitialize(dpy, 0 ,0) ;//&majorVersion, &minorVersion); eglGetConfigs(dpy, NULL, 0, &numConfigs); printf("# configs = %d\n", numConfigs); EGLNativeWindowType window = android_createDisplaySurface(); Loading @@ -57,7 +58,22 @@ int main(int argc, char** argv) return 0; } EGLint r,g,b,a; eglGetConfigAttrib(dpy, config, EGL_RED_SIZE, &r); eglGetConfigAttrib(dpy, config, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(dpy, config, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(dpy, config, EGL_ALPHA_SIZE, &a); surface = eglCreateWindowSurface(dpy, config, window, NULL); if (surface == EGL_NO_SURFACE) { EGLint err = eglGetError(); fprintf(stderr, "%s, config=%p, format = %d-%d-%d-%d\n", EGLUtils::strerror(err), config, r,g,b,a); return 0; } else { printf("config=%p, format = %d-%d-%d-%d\n", config, r,g,b,a); } context = eglCreateContext(dpy, config, NULL, NULL); eglMakeCurrent(dpy, surface, surface, context); eglQuerySurface(dpy, surface, EGL_WIDTH, &w); Loading Loading
include/ui/EGLUtils.h +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ class EGLUtils { public: static const char *strerror(EGLint err); static status_t selectConfigForPixelFormat( EGLDisplay dpy, EGLint const* attrs, Loading
libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp +15 −36 Original line number Diff line number Diff line Loading @@ -42,28 +42,6 @@ using namespace android; static __attribute__((noinline)) const char *egl_strerror(EGLint err) { switch (err){ case EGL_SUCCESS: return "EGL_SUCCESS"; case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; default: return "UNKNOWN"; } } static __attribute__((noinline)) void checkGLErrors() Loading @@ -80,7 +58,7 @@ void checkEGLErrors(const char* token) // GLESonGL seems to be returning 0 when there is no errors? if (error && error != EGL_SUCCESS) LOGE("%s error 0x%04x (%s)", token, int(error), egl_strerror(error)); token, int(error), EGLUtils::strerror(error)); } Loading Loading @@ -112,28 +90,22 @@ PixelFormat DisplayHardware::getFormat() const { return mFormat; } void DisplayHardware::init(uint32_t dpy) { hw_module_t const* module; mNativeWindow = new FramebufferNativeWindow(); framebuffer_device_t const * fbDev = mNativeWindow->getDevice(); mOverlayEngine = NULL; hw_module_t const* module; if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) { overlay_control_open(module, &mOverlayEngine); } framebuffer_device_t const * fbDev = mNativeWindow->getDevice(); PixelFormatInfo fbFormatInfo; getPixelFormatInfo(PixelFormat(fbDev->format), &fbFormatInfo); // initialize EGL const EGLint attribs[] = { EGL_BUFFER_SIZE, fbFormatInfo.bitsPerPixel, EGL_DEPTH_SIZE, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_NONE }; EGLint w, h, dummy; EGLint numConfigs=0, n=0; EGLint numConfigs=0; EGLSurface surface; EGLContext context; mFlags = 0; Loading @@ -146,10 +118,16 @@ void DisplayHardware::init(uint32_t dpy) eglGetConfigs(display, NULL, 0, &numConfigs); EGLConfig config; status_t err = EGLUtils::selectConfigForPixelFormat( display, attribs, fbDev->format, &config); status_t err = EGLUtils::selectConfigForNativeWindow( display, attribs, mNativeWindow.get(), &config); LOGE_IF(err, "couldn't find an EGLConfig matching the screen format"); EGLint r,g,b,a; eglGetConfigAttrib(display, config, EGL_RED_SIZE, &r); eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &a); /* * Gather EGL extensions */ Loading @@ -163,6 +141,7 @@ void DisplayHardware::init(uint32_t dpy) LOGI("version : %s", eglQueryString(display, EGL_VERSION)); LOGI("extensions: %s", egl_extensions); LOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported"); LOGI("EGLSurface: %d-%d-%d-%d, config=%p", r, g, b, a, config); if (mNativeWindow->isUpdateOnDemand()) { Loading
libs/ui/EGLUtils.cpp +36 −5 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #define LOG_TAG "EGLUtils" #include <cutils/log.h> #include <utils/Errors.h> #include <ui/EGLUtils.h> Loading @@ -29,6 +30,28 @@ namespace android { // ---------------------------------------------------------------------------- const char *EGLUtils::strerror(EGLint err) { switch (err){ case EGL_SUCCESS: return "EGL_SUCCESS"; case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; default: return "UNKNOWN"; } } status_t EGLUtils::selectConfigForPixelFormat( EGLDisplay dpy, EGLint const* attrs, Loading @@ -37,6 +60,9 @@ status_t EGLUtils::selectConfigForPixelFormat( { EGLint numConfigs = -1, n=0; if (!attrs) return BAD_VALUE; if (outConfig == NULL) return BAD_VALUE; Loading Loading @@ -65,12 +91,13 @@ status_t EGLUtils::selectConfigForPixelFormat( EGLConfig config = NULL; for (i=0 ; i<n ; i++) { EGLint r,g,b,a; eglGetConfigAttrib(dpy, configs[i], EGL_RED_SIZE, &r); eglGetConfigAttrib(dpy, configs[i], EGL_GREEN_SIZE, &g); eglGetConfigAttrib(dpy, configs[i], EGL_BLUE_SIZE, &b); eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &a); EGLConfig curr = configs[i]; eglGetConfigAttrib(dpy, curr, EGL_RED_SIZE, &r); eglGetConfigAttrib(dpy, curr, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(dpy, curr, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(dpy, curr, EGL_ALPHA_SIZE, &a); if (fbSzA == a && fbSzR == r && fbSzG == g && fbSzB == b) { config = configs[i]; config = curr; break; } } Loading @@ -93,6 +120,10 @@ status_t EGLUtils::selectConfigForNativeWindow( { int err; int format; if (!window) return BAD_VALUE; if ((err = window->query(window, NATIVE_WINDOW_FORMAT, &format)) < 0) { return err; } Loading
libs/ui/FramebufferNativeWindow.cpp +32 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <cutils/log.h> #include <cutils/atomic.h> #include <utils/threads.h> #include <utils/RefBase.h> #include <ui/SurfaceComposerClient.h> #include <ui/Rect.h> Loading Loading @@ -81,10 +82,16 @@ FramebufferNativeWindow::FramebufferNativeWindow() hw_module_t const* module; if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) { int stride; framebuffer_open(module, &fbDev); gralloc_open(module, &grDev); int err; err = framebuffer_open(module, &fbDev); LOGE_IF(err, "couldn't open framebuffer HAL (%s)", strerror(-err)); err = gralloc_open(module, &grDev); LOGE_IF(err, "couldn't open gralloc HAL (%s)", strerror(-err)); // bail out if we can't initialize the modules if (!fbDev || !grDev) return; mUpdateOnDemand = (fbDev->setUpdateRect != 0); Loading Loading @@ -127,12 +134,20 @@ FramebufferNativeWindow::FramebufferNativeWindow() android_native_window_t::query = query; } FramebufferNativeWindow::~FramebufferNativeWindow() { FramebufferNativeWindow::~FramebufferNativeWindow() { if (grDev) { if (buffers[0] != NULL) grDev->free(grDev, buffers[0]->handle); if (buffers[1] != NULL) grDev->free(grDev, buffers[1]->handle); gralloc_close(grDev); } if (fbDev) { framebuffer_close(fbDev); } } status_t FramebufferNativeWindow::setUpdateRectangle(const Rect& r) { Loading Loading @@ -216,6 +231,7 @@ int FramebufferNativeWindow::query(android_native_window_t* window, *value = fb->format; return NO_ERROR; } *value = 0; return BAD_VALUE; } Loading @@ -223,9 +239,16 @@ int FramebufferNativeWindow::query(android_native_window_t* window, }; // namespace android // ---------------------------------------------------------------------------- using namespace android; EGLNativeWindowType android_createDisplaySurface(void) { return new android::FramebufferNativeWindow(); FramebufferNativeWindow* w; w = new FramebufferNativeWindow(); if (w->getDevice() == NULL) { // get a ref so it can be destroyed when we exit this block sp<FramebufferNativeWindow> ref(w); return NULL; } return (EGLNativeWindowType)w; }
opengl/tests/swapinterval/swapinterval.cpp +101 −85 Original line number Diff line number Diff line Loading @@ -15,8 +15,6 @@ ** limitations under the License. */ #define LOG_TAG "fillrate" #include <stdlib.h> #include <stdio.h> Loading @@ -33,7 +31,7 @@ using namespace android; int main(int argc, char** argv) { EGLint configAttribs[] = { EGL_DEPTH_SIZE, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_NONE }; Loading @@ -41,12 +39,15 @@ int main(int argc, char** argv) EGLint minorVersion; EGLContext context; EGLConfig config; EGLint numConfigs=0; EGLSurface surface; EGLint w, h; EGLDisplay dpy; dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(dpy, &majorVersion, &minorVersion); eglInitialize(dpy, 0 ,0) ;//&majorVersion, &minorVersion); eglGetConfigs(dpy, NULL, 0, &numConfigs); printf("# configs = %d\n", numConfigs); EGLNativeWindowType window = android_createDisplaySurface(); Loading @@ -57,7 +58,22 @@ int main(int argc, char** argv) return 0; } EGLint r,g,b,a; eglGetConfigAttrib(dpy, config, EGL_RED_SIZE, &r); eglGetConfigAttrib(dpy, config, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(dpy, config, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(dpy, config, EGL_ALPHA_SIZE, &a); surface = eglCreateWindowSurface(dpy, config, window, NULL); if (surface == EGL_NO_SURFACE) { EGLint err = eglGetError(); fprintf(stderr, "%s, config=%p, format = %d-%d-%d-%d\n", EGLUtils::strerror(err), config, r,g,b,a); return 0; } else { printf("config=%p, format = %d-%d-%d-%d\n", config, r,g,b,a); } context = eglCreateContext(dpy, config, NULL, NULL); eglMakeCurrent(dpy, surface, surface, context); eglQuerySurface(dpy, surface, EGL_WIDTH, &w); Loading