| // Copyright 2015 The Emscripten Authors. All rights reserved. |
| // Emscripten is available under two separate licenses, the MIT license and the |
| // University of Illinois/NCSA Open Source License. Both these licenses can be |
| // found in the LICENSE file. |
| |
| #include <GLES3/gl3.h> |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include <assert.h> |
| #include <emscripten.h> |
| #include <emscripten/html5.h> |
| |
| EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context; |
| |
| int main() |
| { |
| EM_ASM({ |
| Array.prototype.someExtensionFromThirdParty = {}; |
| Array.prototype.someExtensionFromThirdParty.length = 42; |
| Array.prototype.someExtensionFromThirdParty.something = function() { return "Surprise!"; }; |
| }); |
| |
| EmscriptenWebGLContextAttributes attrs; |
| emscripten_webgl_init_context_attributes(&attrs); |
| attrs.majorVersion = 2; |
| attrs.minorVersion = 0; |
| attrs.powerPreference = EM_WEBGL_POWER_PREFERENCE_DEFAULT; |
| |
| int result = 0; |
| |
| EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context = emscripten_webgl_create_context("#canvas", &attrs); |
| if (context) |
| { |
| memset(&attrs, -1, sizeof(attrs)); |
| EMSCRIPTEN_RESULT res = emscripten_webgl_get_context_attributes(context, &attrs); |
| assert(res == EMSCRIPTEN_RESULT_SUCCESS); |
| assert(attrs.majorVersion == 2); |
| assert(attrs.powerPreference == EM_WEBGL_POWER_PREFERENCE_DEFAULT || attrs.powerPreference == EM_WEBGL_POWER_PREFERENCE_LOW_POWER || attrs.powerPreference == EM_WEBGL_POWER_PREFERENCE_HIGH_PERFORMANCE); |
| res = emscripten_webgl_make_context_current(context); |
| assert(res == EMSCRIPTEN_RESULT_SUCCESS); |
| assert(emscripten_webgl_get_current_context() == context); |
| |
| int numExtensions = 0; |
| glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); |
| bool hasGLExtension = false; |
| for(int i = 0; i < numExtensions; ++i) |
| { |
| const char *ext = (const char *)glGetStringi(GL_EXTENSIONS, i); |
| printf("extension %d: %s\n", i, ext); |
| if (strstr(ext, "GL_") == 0) |
| hasGLExtension = true; |
| } |
| if (!hasGLExtension) |
| result = 1; |
| } |
| |
| #ifdef REPORT_RESULT |
| REPORT_RESULT(result); |
| #endif |
| return 0; |
| } |