Fix in preparation for Emscripten updates
PiperOrigin-RevId: 524414804
This commit is contained in:
parent
67ed42d9c6
commit
e1643a5abb
|
@ -67,53 +67,14 @@ absl::Status GlContext::CreateContextInternal(
|
||||||
// TODO: Investigate this option in more detail, esp. on Safari.
|
// TODO: Investigate this option in more detail, esp. on Safari.
|
||||||
attrs.preserveDrawingBuffer = 0;
|
attrs.preserveDrawingBuffer = 0;
|
||||||
|
|
||||||
// Since the Emscripten canvas target finding function is visible from here,
|
// Quick patch for -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR so it also
|
||||||
// we hijack findCanvasEventTarget directly for enforcing old Module.canvas
|
// looks for our #canvas target in Module.canvas, where we expect it to be.
|
||||||
// behavior if the user desires, falling back to the new DOM element CSS
|
// -s OFFSCREENCANVAS_SUPPORT=1 will no longer work with this under the new
|
||||||
// selector behavior next if that is specified, and finally just allowing the
|
// event target behavior, but it was never supposed to be tapping into our
|
||||||
// lookup to proceed on a null target.
|
// canvas anyways. See b/278155946 for more background.
|
||||||
// TODO: Ensure this works with all options (in particular,
|
EM_ASM({ specialHTMLTargets["#canvas"] = Module.canvas; });
|
||||||
// multithreading options, like the special-case combination of USE_PTHREADS
|
|
||||||
// and OFFSCREEN_FRAMEBUFFER)
|
|
||||||
// clang-format off
|
|
||||||
EM_ASM(
|
|
||||||
let init_once = true;
|
|
||||||
if (init_once) {
|
|
||||||
const cachedFindCanvasEventTarget = findCanvasEventTarget;
|
|
||||||
|
|
||||||
if (typeof cachedFindCanvasEventTarget !== 'function') {
|
|
||||||
if (typeof console !== 'undefined') {
|
|
||||||
console.error('Expected Emscripten global function '
|
|
||||||
+ '"findCanvasEventTarget" not found. WebGL context creation '
|
|
||||||
+ 'may fail.');
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
findCanvasEventTarget = function(target) {
|
|
||||||
if (target == 0) {
|
|
||||||
if (Module && Module.canvas) {
|
|
||||||
return Module.canvas;
|
|
||||||
} else if (Module && Module.canvasCssSelector) {
|
|
||||||
return cachedFindCanvasEventTarget(Module.canvasCssSelector);
|
|
||||||
}
|
|
||||||
if (typeof console !== 'undefined') {
|
|
||||||
console.warn('Module properties canvas and canvasCssSelector not ' +
|
|
||||||
'found during WebGL context creation.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// We still go through with the find attempt, although for most use
|
|
||||||
// cases it will not succeed, just in case the user does want to fall-
|
|
||||||
// back.
|
|
||||||
return cachedFindCanvasEventTarget(target);
|
|
||||||
}; // NOLINT: Necessary semicolon.
|
|
||||||
init_once = false;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
// clang-format on
|
|
||||||
|
|
||||||
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context_handle =
|
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context_handle =
|
||||||
emscripten_webgl_create_context(nullptr, &attrs);
|
emscripten_webgl_create_context("#canvas", &attrs);
|
||||||
|
|
||||||
// Check for failure
|
// Check for failure
|
||||||
if (context_handle <= 0) {
|
if (context_handle <= 0) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user