Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e8693aa authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 25523 into eclair

* changes:
  Add additional error checking, exit early if errors occur.
parents b70aab59 05877759
Loading
Loading
Loading
Loading
+59 −18
Original line number Diff line number Diff line
@@ -34,14 +34,16 @@ using namespace android;
static void printGLString(const char *name, GLenum s)
{
     fprintf(stderr, "printGLString %s, %d\n", name, s);
#if 0 // causes hangs
     const char *v = (const char *)glGetString(s);
     int error = glGetError();
     fprintf(stderr, "glGetError() = %d, result of glGetString = %x\n", error,
         (unsigned int)v);
     if ((v < (const char*) 0) || (v > (const char*) 0x1000))
     if ((v < (const char*) 0) || (v > (const char*) 0x10000))
         fprintf(stderr, "GL %s = %s\n", name, v);
     else
         fprintf(stderr, "GL %s = (null)\n", name);
         fprintf(stderr, "GL %s = (null) 0x%08x\n", name, (unsigned int) v);
#endif
}

static const char* eglErrorToString[] = {
@@ -61,7 +63,11 @@ static const char* eglErrorToString[] = {
    "EGL_BAD_SURFACE"
};

static void checkEglError(const char* op) {
static void checkEglError(const char* op, EGLBoolean returnVal = EGL_TRUE) {
    if (returnVal != EGL_TRUE) {
        fprintf(stderr, "%s() returned %d\n", op, returnVal);
    }

    for(EGLint error = eglGetError();
		error != EGL_SUCCESS;
	error = eglGetError()) {
@@ -69,25 +75,30 @@ static void checkEglError(const char* op) {
        if (error >= EGL_SUCCESS && error <= EGL_BAD_SURFACE) {
            errorString = eglErrorToString[error - EGL_SUCCESS];
        }
        fprintf(stderr, "%s() returned eglError %s (0x%x)\n", op,
        fprintf(stderr, "after %s() eglError %s (0x%x)\n", op,
            errorString, error);
    }
}

int main(int argc, char** argv)
{
    EGLBoolean returnValue;
    EGLConfig configs[2];
    EGLint config_count;

	EGLint context_attribs[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
    EGLint s_configAttribs[] = {
         EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
	EGL_BUFFER_SIZE,     EGL_DONT_CARE,
	EGL_RED_SIZE,        5,
	EGL_GREEN_SIZE,      6,
	EGL_BLUE_SIZE,       5,
	EGL_DEPTH_SIZE,      8,
	EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
	EGL_NONE
     };

     EGLint numConfigs = -1;
     EGLint majorVersion;
     EGLint minorVersion;
     EGLConfig config;
     EGLContext context;
     EGLSurface surface;
     EGLint w, h;
@@ -100,20 +111,50 @@ int main(int argc, char** argv)
     checkEglError("<init>");
     dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
     checkEglError("eglGetDisplay");
     eglInitialize(dpy, &majorVersion, &minorVersion);
     checkEglError("eglInitialize");
     if (dpy == EGL_NO_DISPLAY) {
         printf("eglGetDisplay returned EGL_NO_DISPLAY.\n");
         return 0;
     }
     returnValue = eglInitialize(dpy, &majorVersion, &minorVersion);
     checkEglError("eglInitialize", returnValue);
     fprintf(stderr, "EGL version %d.%d\n", majorVersion, minorVersion);
     EGLUtils::selectConfigForNativeWindow(dpy, s_configAttribs, window, &config);
     fprintf(stderr, "Chosen config: 0x%08x\n", (unsigned long) config);

     returnValue = eglGetConfigs (dpy, configs, 2, &config_count);
     checkEglError("eglGetConfigs", returnValue);
     fprintf(stderr, "Config count: %d\n", config_count);
     for(int i = 0; i < config_count; i++) {
        fprintf(stderr, "%d: 0x%08x\n", i, (unsigned int) configs[i]);
     }
#if 0
     EGLConfig config;
     EGLUtils::selectConfigForNativeWindow(dpy, s_configAttribs, window, &config);
     checkEglError("EGLUtils::selectConfigForNativeWindow");
     surface = eglCreateWindowSurface(dpy, config, window, NULL);
     checkEglError("eglCreateWindowSurface");
#else
    int chooseConfigResult = eglChooseConfig(dpy, s_configAttribs, configs, 2, &config_count);
    checkEglError("eglChooseConfig", chooseConfigResult);
    if (chooseConfigResult != EGL_TRUE )
    {
        printf("eglChooseConfig failed\n");
        return 0;
    }
#endif

     surface = eglCreateWindowSurface(dpy, configs[0], window, NULL);
     checkEglError("eglCreateWindowSurface");
     if (surface == EGL_NO_SURFACE)
	 {
         printf("gelCreateWindowSurface failed.\n");
         return 0;
	 }
     EGLint gl2_0Attribs[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};

     context = eglCreateContext(dpy, config, NULL, gl2_0Attribs);
     context = eglCreateContext(dpy, configs[0], EGL_NO_CONTEXT, context_attribs);
     checkEglError("eglCreateContext");
	 if (context == EGL_NO_CONTEXT)
     {
        printf("eglCreateContext failed\n");
        return 0;
	 }
     eglMakeCurrent(dpy, surface, surface, context);
     checkEglError("eglMakeCurrent");
     eglQuerySurface(dpy, surface, EGL_WIDTH, &w);