WebGL parameters return the JavaScript types the specification assigns them
Each probed parameter comes back as the type the specification assigns it — typed arrays as typed arrays, not plain arrays.
What a detector infers
getParameter does not return loose values: the WebGL specification fixes the JavaScript TYPE of each one. MAX_VIEWPORT_DIMS and SCISSOR_BOX come back as Int32Array, ALIASED_LINE_WIDTH_RANGE and COLOR_CLEAR_VALUE as Float32Array, VERSION as a string, DEPTH_WRITEMASK as a boolean, COLOR_WRITEMASK as a plain array of four booleans.
Those types are produced by the implementation, and a page that rewrites the parameter table in JavaScript almost never reproduces them — an override table naturally holds array literals and numbers, so a spoofed MAX_VIEWPORT_DIMS arrives as Array where every real driver on earth gives Int32Array. The check is entirely independent of the values: the numbers may be whatever the persona wants, and the constructor still gives the lie away.
It is also why this sits beside the parameter-table row rather than inside it — that one asks whether the table is complete and hashes it, this one asks whether the table was built by an implementation.
How to resolve it
Override WebGL parameters at the engine level, where the return value is constructed by the implementation itself. A JavaScript wrapper around getParameter is visible from the constructor name alone, whatever the numbers say.
Read in the wild by
FakeBrowser (collector)
Stores every getParameter result as {type: value.constructor.name, value} across ~200 numeric enums — recording the constructor separately from the value, which is only necessary if the type has to be reproduced faithfully on replay.
dumpWebGLCore(), result.params[glEnum].type — script/dumpDD.js
kkoooqq/fakebrowser script/dumpDD.js
Every attribution traces to a published artifact. See the sources and their limits.
Nearby checks in Render & GPU
- WebGPU's subgroup size is the wave width of the GPU WebGL names
webgpu-subgroup-vs-rendererChrome's WebGPU implementation (Dawn) reports GPUAdapterInfo.subgroupMinSize from the driver: on Windows the Direct3D 12 backend reads… - WebGPU's features and limits fit the hardware GPU WebGL names
webgpu-features-vs-rendererOn Windows, Chrome's WebGPU runs on Direct3D 12, and Direct3D bounds what an adapter can expose: DXGI has no ASTC or ETC2 formats at all, BC… - The WebGL renderer string is one ANGLE's Direct3D 11 backend can print
webgl-renderer-angle-formatOn Windows, Chrome's WebGL renderer string is assembled by ANGLE's Direct3D 11 backend, not typed by anyone: the adapter's description, then… - WebGL exposes a full parameter table + UNMASKED vendor/renderer
webgl-param-tableBeyond the two headline strings, a WebGL context answers getParameter for dozens of driver-specific limits. - The anisotropy limit reads as a number once its WebGL extension is enabled
webgl-anisotropy-after-extensionEXT_texture_filter_anisotropic adds exactly one parameter to getParameter, MAX_TEXTURE_MAX_ANISOTROPY_EXT, and the extension guarantees it… - A Direct3D 11 WebGL renderer reports the uniform limits ANGLE fixes for its vendor
webgl-d3d11-limits-vs-vendorChrome, Edge, Brave and Firefox on Windows render WebGL through ANGLE's Direct3D 11 backend, and that backend does not ask the driver for… - A Mesa OpenGL WebGL renderer reports the varying and uniform limits Mesa and ANGLE give it
webgl-mesa-limits-vs-driverChrome on Linux renders WebGL through ANGLE's OpenGL backend, which does not invent shader limits: it reads MAX_VARYING_VECTORS from the GL… - WebGL vendor/renderer identical in a Worker
webgl-worker-vs-mainThe audit reads UNMASKED_VENDOR and UNMASKED_RENDERER on the main thread, then spawns a dedicated Worker that builds its own WebGL context…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Render & GPU checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Render & GPU — the family webgl-param-value-types belongs to.
