# web the browser as a platform: what its graphics, media, and network layers actually do, measured from inside a page. these notes are about browser behaviour itself. patterns for building services live in [systems/](../systems/), and shipping them in [operations/](../operations/). ## topics ### graphics - [webgl-shader-linking](./graphics/webgl-shader-linking.md) — linking is synchronous unless you poll for it; only chromium caches linked programs - [webgl-drawing-buffer-copies](./graphics/webgl-drawing-buffer-copies.md) — an `alpha: false` canvas is RGB, and a copy may not ask for more than that - [webgl-call-instrumentation](./graphics/webgl-call-instrumentation.md) — count and attribute GL calls by wrapping the context prototype; firefox stops warning after 32 - [canvas-2d-glow](./graphics/canvas-2d-glow.md) — `shadowBlur` costs 2 ms in one engine and 73 ms in another; cached sprites are flat, and overlapping translucency needs a bounded layer - [godot-web-exports](./graphics/godot-web-exports.md) — batching versus culling, startup shader links, mesh reads as GPU readbacks, engine-owned console warnings, and the engine binary as the memory floor ### media - [media-time-and-decoded-time](./media/media-time-and-decoded-time.md) — a media element's clock and `decodeAudioData`'s samples disagree, by a different amount in each browser and after each seek - [mediarecorder-containers](./media/mediarecorder-containers.md) — each browser records something different, and a bare `audio/mp4` can hold opus that safari will not play ### mobile - [home-screen-web-app-scope](./mobile/home-screen-web-app-scope.md) — without a manifest the installing page decides the scope, and the home link can land outside it - [ios-input-zoom](./mobile/ios-input-zoom.md) — inputs under 16px zoom the page, and `font: inherit` quietly undoes the fix - [webkit-page-memory](./mobile/webkit-page-memory.md) — a killed page reloads while a lost GPU leaves a black canvas; compiled wasm costs several times its size, and embedded frames share the page's process ### network - [cors-modes-and-the-http-cache](./cors-modes-and-the-http-cache.md) — one URL fetched in two CORS modes shares one cache entry unless the server varies on origin for every response