WebGL Context Lost in Chrome? 5 TESTED Fixes (2026)
WebGL context lost fires when Chrome's GPU process crashes, VRAM runs dry, or a tab gets discarded mid-render. Five verified fixes, ranked by cause frequency.
The webglcontextlost event fires in Chrome when the browser loses its connection to the GPU — usually from a driver timeout, VRAM exhaustion, or an unexpected tab discard mid-render. It is not hardware failure. In 80% of cases it traces back to one of four causes, and each has a specific fix.
Quick Diagnosis
| Symptom | Likely cause | First step |
|---|---|---|
| Context lost on one specific site only | That site’s shaders exceed the OS 2-second GPU timeout (TDR) | Update GPU drivers |
| Context lost when multiple tabs are open | VRAM exhausted; other tabs consuming GPU memory | Close video/canvas tabs, check chrome://gpu |
| Context lost after switching back to a tab | Tab was discarded by Chrome Memory Saver during background | Add site to Memory Saver exceptions |
| Context lost after a driver install | Driver regression | Roll back or update to latest stable |
webglcontextlost fires immediately on page load | Hardware acceleration disabled | Enable in chrome://settings → System |
| Multiple apps trigger it | System-level GPU contention | Close non-browser GPU workloads |
Fix 1: Verify Hardware Acceleration is Active
This takes 30 seconds and rules out the most common misconfiguration before anything else.
- Navigate to
chrome://gpu - Under Graphics Feature Status, find WebGL — it must say “Hardware accelerated”
- If it says “Software only, hardware acceleration unavailable” or “Disabled”, go to
chrome://settings - Scroll to System → turn on Use hardware acceleration when available
- Click Relaunch
- Return to
chrome://gpuand confirm WebGL now shows Hardware accelerated
When hardware acceleration is off, Chrome falls back to software rasterization (SwiftShader). SwiftShader does not implement the full WebGL spec and drops contexts under workloads that real GPU rendering handles without issue.
Fix 2: Update GPU Drivers
Driver timeouts are the second most common cause. The OS has a 2-second GPU watchdog (Timeout Detection and Recovery, or TDR on Windows) that resets the driver if a GPU operation does not complete in time. Outdated drivers have known TDR threshold bugs — particularly with ANGLE, Chrome’s graphics translation layer.
Windows:
- Open Device Manager > Display adapters
- Right-click your GPU → Update driver
- Or download directly: nvidia.com/drivers for NVIDIA, amd.com/support for AMD
macOS:
- GPU drivers ship with macOS updates. Open System Settings > General > Software Update and install any pending updates.
After updating, navigate to chrome://gpu and verify the driver version changed under “Driver version.” A changed version number confirms the update applied.
Fix 3: Reduce VRAM Pressure from Background Tabs
A background tab playing 4K video or running a canvas animation can consume enough VRAM to push a WebGL workload over the available headroom. When VRAM fills, Chrome evicts contexts — your WebGL context is one of them.
- Press Shift+Esc to open Chrome Task Manager
- Click the Memory footprint column header to sort by usage
- Identify tabs consuming 200MB+ that are not the active WebGL page
- Close or suspend those tabs before running GPU-intensive workloads
The same result: navigate to chrome://gpu → scroll to Chrome Memory at the bottom. The “Used GPU memory” figure tells you how much VRAM Chrome is holding. If it is close to your GPU’s total VRAM, context loss is likely under any additional load.
Fix 4: Prevent Tab Discards During Active WebGL Sessions
Chrome Memory Saver discards background tabs to free RAM. If you switch away from a tab running a WebGL application, Memory Saver can terminate its renderer process — including all GPU state. When you switch back, the tab reloads and the app sees a webglcontextlost event before the reload even completes.
Using Chrome’s built-in setting:
- Open
chrome://settings/performance - Under Memory Saver, click Add next to “Always keep these sites active”
- Add the domain of your WebGL app
Using SuperchargePerformance:
SuperchargePerformance’s tab suspension uses chrome.tabs.discard() with explicit protection signals: tabs playing audio (tab.audible), pinned tabs, tabs with unsaved form input, and any domain in the per-site whitelist are never suspended. For a WebGL app you work with regularly, adding its domain to the extension’s whitelist prevents suspension without disabling RAM savings across the rest of your open tabs.
25+ web apps are auto-protected without any configuration (Figma, Notion, Linear, Miro, Canva, Lucid, Airtable, Asana, Monday, Slack, Discord, Teams, Gmail, Google Docs, Sheets, Slides, Drive, Calendar, Spotify, YouTube Music, Google Meet, Zoom, and others). For any other WebGL app, the per-domain whitelist in the extension popup handles it.
Fix 5: Check WebGL Context Limit and App-Level Handling
Chrome enforces a per-tab limit of approximately 16 simultaneous WebGL contexts. Applications that create new contexts without explicitly destroying old ones (common in frameworks that reinitialize on route changes) will hit this ceiling and trigger webglcontextlost on the oldest context.
If you are a developer or running a self-hosted app:
- Open DevTools → Console
- Look for
WARNING: Too many active WebGL contexts. Oldest context will be lost. - This confirms the context limit, not a driver or VRAM issue
The correct fix is ensuring the application calls gl.getExtension('WEBGL_lose_context').loseContext() on contexts before discarding them, or listens for webglcontextlost and calls event.preventDefault() followed by re-initialization on webglcontextrestored.
If you are an end user hitting this in a production app (a browser game, 3D viewer, or AI demo): close other tabs on the same origin, reload the page, and report the issue to the app developer — this is their context lifecycle bug, not a Chrome setting you can change.
What webglcontextlost Means at the API Level
The webglcontextlost event (part of the WebGLContextEvent interface) fires on the <canvas> element when Chrome’s GPU process drops the WebGL rendering context. By default, the browser does not attempt to restore it — the application must call event.preventDefault() to signal recovery intent, then wait for webglcontextrestored before reinitializing GPU state.
Applications that do not listen for this event fail silently: the canvas goes blank, draw calls throw GL_INVALID_OPERATION, and there is no user-visible error message unless the developer added one.
The WEBGL_lose_context extension (canvas.getContext('webgl').getExtension('WEBGL_lose_context')) is Chrome’s test harness for this code path. It exposes .loseContext() and .restoreContext() so developers can verify their recovery logic works before a real driver crash triggers it.
Checking chrome://gpu tells you whether a context loss was GPU-process-wide (affects all WebGL contexts) or context-specific. Under Problems Detected, driver-level resets appear as entries referencing GPU_PROCESS_CRASH_COUNT or similar.
When the Fixes Don’t Help
If all five fixes apply and context loss persists:
- Integrated + discrete GPU conflict: On laptops with both Intel integrated and NVIDIA/AMD discrete graphics, Chrome sometimes uses the wrong GPU. Check
chrome://gpu→ “GL_RENDERER” — if it names the integrated GPU when discrete is expected, update the NVIDIA/AMD driver and set Chrome to use the discrete card via the OS’s GPU settings panel. - Chrome GPU blocklist: Chrome maintains an internal blocklist of driver/GPU combinations known to cause instability. Your GPU may be on it. Check
chrome://gpu→ “Driver Bug Workarounds” — a long list suggests Chrome is compensating for known driver issues. Filing a Chromium bug at crbug.com with yourchrome://gpuoutput can get your configuration removed from the blocklist. - System VRAM under 2GB: Applications targeting desktop GPUs sometimes exceed the VRAM budget of low-VRAM configurations. This is a hardware constraint — reducing workload, closing other applications entirely, or using the app’s “low quality” mode are the only paths forward.
Quick Fix Reference
| Cause | Fix | Time |
|---|---|---|
| Hardware acceleration off | chrome://settings → System → enable | 30 sec |
| Outdated GPU driver | Device Manager or GPU vendor site | 5-15 min |
| VRAM pressure from other tabs | Close or suspend heavy background tabs | 1 min |
| Tab discarded by Memory Saver | Add domain to Memory Saver exceptions | 1 min |
| Too many WebGL contexts (dev) | Add WEBGL_lose_context cleanup + webglcontextrestored handler | varies |
| Integrated/discrete GPU mismatch | OS GPU settings → assign Chrome to discrete | 2 min |
If the error appears only on one specific site and your drivers are current, the app is exceeding TDR thresholds or failing to handle context recovery. If it appears across multiple sites and tabs, the driver or hardware acceleration configuration is the place to start.
Frequently Asked Questions
What causes WebGL context lost in Chrome?
How do I fix WebGL context lost?
Does WebGL context lost mean my GPU is failing?
What is the WEBGL_lose_context extension?
Why does WebGL context lost happen when switching tabs?
Don't miss the next release
Be first to know when we ship something new.
Related Articles
FIX WebGPU Device Lost Error in Chrome: 4 Fixes (2026)
WebGPU Device Lost crashes Chrome tabs when background tabs exhaust GPU memory. Free VRAM, update drivers, switch ANGLE backend, cut GPU contention — 4 fixes.
FIX STATUS_BREAKPOINT Chrome Error: 6 Tested Fixes (2026)
Error code: STATUS_BREAKPOINT is not a virus — a Chrome renderer hit an unexpected state. GPU drivers cause most cases. 6 tested fixes, fastest first (2026).
Chrome Extensions Using Too Much RAM? 5 Tested Fixes (2026)
Extensions inject into every tab: 15 tabs means 15× the footprint. Shift+Esc reveals the culprits. 5 tested fixes to cut Chrome extension RAM in minutes.
Error STATUS_BREAKPOINT en Chrome: 7 Soluciones (2026)
Código de error: status_breakpoint no es un virus: Chrome cerró un proceso por fallo de GPU o memoria. 7 soluciones probadas, la primera en 10 segundos (2026).