diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-08-27 16:54:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-27 16:54:22 +0200 |
commit | c1f687c6818883f70c2b7f85577c51ed5ad65c08 (patch) | |
tree | 68bf6b19674bd54ab6662a12cfd6aee37a4a4d83 /platform/javascript | |
parent | 78bb53f85d97d3a5b66d9005732c3c07c1f0e636 (diff) | |
parent | 08f452d1a95d7f171472c33a60983d95adf1665d (diff) |
Merge pull request #21387 from hpvb/fix-15324
Fall back to GLES2 if GLES3 is not working
Diffstat (limited to 'platform/javascript')
-rw-r--r-- | platform/javascript/os_javascript.cpp | 62 |
1 files changed, 48 insertions, 14 deletions
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp index 5a8a05d4df..80699b0d32 100644 --- a/platform/javascript/os_javascript.cpp +++ b/platform/javascript/os_javascript.cpp @@ -652,23 +652,57 @@ Error OS_JavaScript::initialize(const VideoMode &p_desired, int p_video_driver, attributes.alpha = false; attributes.antialias = false; ERR_FAIL_INDEX_V(p_video_driver, VIDEO_DRIVER_MAX, ERR_INVALID_PARAMETER); - switch (p_video_driver) { - case VIDEO_DRIVER_GLES3: - attributes.majorVersion = 2; - RasterizerGLES3::register_config(); - RasterizerGLES3::make_current(); - break; - case VIDEO_DRIVER_GLES2: - attributes.majorVersion = 1; - RasterizerGLES2::register_config(); - RasterizerGLES2::make_current(); - break; + + bool gles3 = true; + if (p_video_driver == VIDEO_DRIVER_GLES2) { + gles3 = false; + } + + bool gl_initialization_error = false; + + while (true) { + if (gles3) { + if (RasterizerGLES3::is_viable() == OK) { + attributes.majorVersion = 2; + RasterizerGLES3::register_config(); + RasterizerGLES3::make_current(); + break; + } else { + if (GLOBAL_GET("rendering/quality/driver/driver_fallback") == "Best") { + p_video_driver = VIDEO_DRIVER_GLES2; + gles3 = false; + continue; + } else { + gl_initialization_error = true; + break; + } + } + } else { + if (RasterizerGLES2::is_viable() == OK) { + attributes.majorVersion = 1; + RasterizerGLES2::register_config(); + RasterizerGLES2::make_current(); + break; + } else { + gl_initialization_error = true; + break; + } + } } - video_driver_index = p_video_driver; EMSCRIPTEN_WEBGL_CONTEXT_HANDLE ctx = emscripten_webgl_create_context(NULL, &attributes); - ERR_EXPLAIN("WebGL " + itos(attributes.majorVersion) + ".0 not available"); - ERR_FAIL_COND_V(emscripten_webgl_make_context_current(ctx) != EMSCRIPTEN_RESULT_SUCCESS, ERR_UNAVAILABLE); + if (emscripten_webgl_make_context_current(ctx) != EMSCRIPTEN_RESULT_SUCCESS) { + gl_initialization_error = true; + } + + if (gl_initialization_error) { + OS::get_singleton()->alert("Your browser does not support any of the supported WebGL versions.\n" + "Please update your browser version.", + "Unable to initialize Video driver"); + return ERR_UNAVAILABLE; + } + + video_driver_index = p_video_driver; video_mode = p_desired; // Can't fulfil fullscreen request during start-up due to browser security. |