Graphics
Canvas 2D, WebGL 1 and WebGL 2 on Brewser
Canvas 2D
Fully supported, backed by Skia. Text, paths, images, compositing and
toDataURL all work as in a desktop browser.
WebGL 1
WebGL isn't a software reimplementation. It's Brewser's own bridge. nx.js
provided the initial GL wiring; Brewser built it out into the complete
WebGL 1 & 2 API surface, the driver-probed extension system and the supporting
libraries, all mapping JavaScript straight to the Switch's Tegra X1 GPU. Shaders
and draws run on real silicon, JIT-compiled. What varies is how much of the
WebGL API surface and how many extensions are wired through the bridge. The
complete context / draw / state / buffer / texture / shader API is present for
both versions, and extensions are driver-probed: a name is advertised only
when the underlying GL driver actually supports it, so getSupportedExtensions()
and getExtension() stay consistent by construction.
WebGL 1 is the safest, most compatible target.
- Complete GLSL ES 1.00 pipeline; textures (2D + cube), mipmaps, framebuffers / renderbuffers, depth textures
- Driver-probed extensions:
ANGLE_instanced_arrays,OES_vertex_array_object,OES_element_index_uint,OES_standard_derivatives,OES_texture_float/half_float(+_linear),WEBGL_depth_texture,WEBGL_draw_buffers,EXT_sRGB,EXT_blend_minmax, anisotropic filtering, plus the full compressed-texture family (S3TC / DXT, ETC1 / ETC2, ASTC, BPTC, RGTC) - Real-world proof: Unity WebGL 1 exports run, and generative / demoscene / full-screen-shader apps run well on the platform
- Gaps: coverage is broad but not exhaustive, so an exotic
getExtension()can still returnnull
WebGL 2
Supported including advanced usage, and validated against the Khronos WebGL conformance suite, with hardening ongoing.
- Full GLSL ES 3.00 (
#version 300 es) surface: VAOs, uniform buffer objects, transform feedback, 3D & 2D-array textures (texImage3D/texStorage3D/framebufferTextureLayer), sampler objects, sync / fence objects, occlusion & timer queries, integer vertex attributes, and everyuniform*/uniformMatrix*variant - Multiple render targets,
blitFramebuffer, multisample renderbuffers,readBuffer/drawBuffers,EXT_color_buffer_float/half_float,EXT_texture_norm16, sRGB - Real-world proof: complex Three.js (r162) scenes, PMREM environment maps and multi-pass post-processing render JIT-optimized on hardware
- Gaps: layered / 3D-texture sampling (
sampler3D/sampler2DArray) is limited by the Tegra GPU driver rather than the bridge. Conformance hardening against the Khronos suite is ongoing; if you hit a missing method or extension, please report it
Coverage here is broad but not exhaustive. For the coverage numbers, see Engine Status.
Shader tips
GLSL fragment and vertex shaders work well on the platform. Generative art, demoscene-style effects and full-screen shader apps run well on Brewser.
Performance notes
The Tegra X1 is capable but not a desktop GPU:
- Prefer flat fills over gradients and shadows in UI-heavy apps.
- Batch draw calls; avoid per-frame shader recompilation.
- Target 720p (docked output is scaled).
See Hints & Tips: Performance for more.
Related
- Engine Status: how complete the engine is, with coverage numbers for WebGL and every other pillar
- Web Platform Support: the JavaScript APIs and standards Brewser implements
- Performance: getting the most out of the Tegra X1 GPU

Brewser Docs