diff options
author | Jukka Jylänki <jujjyl@gmail.com> | 2013-12-19 23:58:45 +0200 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-12-20 11:21:19 +0200 |
commit | c1f5a5b30a53f22e495de4313c81496431b2e759 (patch) | |
tree | 2a8ff59df33d644439e97dbb3bf4728a29d9e6c9 | |
parent | 68bc17077e0919d369fe898631f7a2108487534a (diff) |
Make EGL function eglCreateContext spec-conformant and actually read the EGL_CONTEXT_CLIENT_VERSION field when creating a context. Require the version number 2, since WebGL1 maps to GLES2.
-rw-r--r-- | src/library_egl.js | 20 | ||||
-rw-r--r-- | tests/test_egl.c | 11 |
2 files changed, 30 insertions, 1 deletions
diff --git a/src/library_egl.js b/src/library_egl.js index 73d5e544..11cf8951 100644 --- a/src/library_egl.js +++ b/src/library_egl.js @@ -264,6 +264,26 @@ var LibraryEGL = { return 0; } + // EGL 1.4 spec says default EGL_CONTEXT_CLIENT_VERSION is GLES1, but this is not supported by Emscripten. + // So user must pass EGL_CONTEXT_CLIENT_VERSION == 2 to initialize EGL. + var glesContextVersion = 1; + for(;;) { + var param = {{{ makeGetValue('contextAttribs', '0', 'i32') }}}; + if (!param) break; + var value = {{{ makeGetValue('contextAttribs', '4', 'i32') }}}; + if (param == 0x3098 /*EGL_CONTEXT_CLIENT_VERSION*/) { + glesContextVersion = value; + } + contextAttribs += 8; + } + if (glesContextVersion != 2) { +#if GL_ASSERTIONS + Module.printErr('When initializing GLES2/WebGL1 via EGL, one must pass EGL_CONTEXT_CLIENT_VERSION = 2 to GL context attributes! GLES version ' + glesContextVersion + ' is not supported!'); +#endif + EGL.setErrorCode(0x3005 /* EGL_BAD_CONFIG */); + return 0; /* EGL_NO_CONTEXT */ + } + _glutInitDisplayMode(0x92 /* GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE */); EGL.windowID = _glutCreateWindow(); if (EGL.windowID != 0) { diff --git a/tests/test_egl.c b/tests/test_egl.c index 5864a797..d66949d0 100644 --- a/tests/test_egl.c +++ b/tests/test_egl.c @@ -37,12 +37,21 @@ int main(int argc, char *argv[]) assert(eglGetError() == EGL_SUCCESS); assert(surface != 0); + // WebGL maps to GLES2. GLES1 is not supported. + EGLint contextAttribsOld[] = + { + EGL_CONTEXT_CLIENT_VERSION, 1, + EGL_NONE + }; + EGLContext context = eglCreateContext(display, config, NULL, contextAttribsOld); + assert(eglGetError() != EGL_SUCCESS); + EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; - EGLContext context = eglCreateContext(display, config, NULL, contextAttribs); + context = eglCreateContext(display, config, NULL, contextAttribs); assert(eglGetError() == EGL_SUCCESS); assert(context != 0); |