[Web] Force WebGL2 when supported.

This commit is contained in:
Fabio Alessandrelli 2022-11-05 13:55:45 +01:00
parent cece83fdf2
commit 3ff7964145

View File

@ -758,10 +758,8 @@ DisplayServerWeb::DisplayServerWeb(const String &p_rendering_driver, WindowMode
godot_js_os_request_quit_cb(request_quit_callback);
#ifdef GLES3_ENABLED
// TODO "vulkan" defaults to webgl2 for now.
bool wants_webgl2 = p_rendering_driver == "opengl3" || p_rendering_driver == "vulkan";
bool webgl2_init_failed = wants_webgl2 && !godot_js_display_has_webgl(2);
if (wants_webgl2 && !webgl2_init_failed) {
bool webgl2_inited = false;
if (godot_js_display_has_webgl(2)) {
EmscriptenWebGLContextAttributes attributes;
emscripten_webgl_init_context_attributes(&attributes);
attributes.alpha = OS::get_singleton()->is_layered_allowed();
@ -770,20 +768,17 @@ DisplayServerWeb::DisplayServerWeb(const String &p_rendering_driver, WindowMode
attributes.explicitSwapControl = true;
webgl_ctx = emscripten_webgl_create_context(canvas_id, &attributes);
if (emscripten_webgl_make_context_current(webgl_ctx) != EMSCRIPTEN_RESULT_SUCCESS) {
webgl2_init_failed = true;
} else {
if (!emscripten_webgl_enable_extension(webgl_ctx, "OVR_multiview2")) {
// @todo Should we log this?
}
RasterizerGLES3::make_current();
}
webgl2_inited = webgl_ctx && emscripten_webgl_make_context_current(webgl_ctx) == EMSCRIPTEN_RESULT_SUCCESS;
}
if (webgl2_init_failed) {
if (webgl2_inited) {
if (!emscripten_webgl_enable_extension(webgl_ctx, "OVR_multiview2")) {
print_verbose("Failed to enable WebXR extension.");
}
RasterizerGLES3::make_current();
} else {
OS::get_singleton()->alert("Your browser does not seem to support WebGL2. Please update your browser version.",
"Unable to initialize video driver");
}
if (!wants_webgl2 || webgl2_init_failed) {
RasterizerDummy::make_current();
}
#else