WebGL capabilities
webgl.capabilities
Ready · No signal has been run.
Results
Research focus
Selected evidence from this run. Cross-run stability and comparison verdicts require a session comparison.
Full evidence
| Property | Value |
|---|---|
| No results yet. No signal has been run. | |
JSON
Selected signal results for external comparison. Field statuses, controls and exact values are retained.
No run export is available.
Source
Source is not connected yet.
// Test source pending.Reference
Reference is not connected yet.
Definition
Independent WebGL1/2 renderer claims, extension membership, resource limits, shader precision and actual context attributes.
Find it in the repository
- Collector source
core/signals/webgl/capabilities.ts- Export
measurementModule· Signal object- Field definitions
core/definitions/webgl/capabilities.ts- Capture membership
- Product capture ·
common/capture/product.ts - Page registration
app/signals/registry.ts- Field projection
core/results/measurement.ts
Execution contract
- Signal
webgl.capabilities- Collector
webgl.capabilities- API / surface
- core/signals/webgl/capabilities.ts
- Timeout
- 750 ms
- Companion signals
- None
- Fixture inputs
- Declared requests (listed below)
Exact request inputs
[
{
"key": "webgl.capabilities.webgl-context",
"inputs": {
"webgl-context": {
"kind": "webgl",
"requested": {
"alpha": false,
"antialias": false,
"depth": false,
"stencil": false,
"preserveDrawingBuffer": true
},
"dimensions": [
1,
1
]
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl-render-limits",
"inputs": {
"webgl-ALIASED_LINE_WIDTH_RANGE": {
"name": "ALIASED_LINE_WIDTH_RANGE"
},
"webgl-ALIASED_POINT_SIZE_RANGE": {
"name": "ALIASED_POINT_SIZE_RANGE"
},
"webgl-ALPHA_BITS": {
"name": "ALPHA_BITS"
},
"webgl-BLUE_BITS": {
"name": "BLUE_BITS"
},
"webgl-DEPTH_BITS": {
"name": "DEPTH_BITS"
},
"webgl-GREEN_BITS": {
"name": "GREEN_BITS"
},
"webgl-MAX_COMBINED_TEXTURE_IMAGE_UNITS": {
"name": "MAX_COMBINED_TEXTURE_IMAGE_UNITS"
},
"webgl-MAX_CUBE_MAP_TEXTURE_SIZE": {
"name": "MAX_CUBE_MAP_TEXTURE_SIZE"
},
"webgl-MAX_RENDERBUFFER_SIZE": {
"name": "MAX_RENDERBUFFER_SIZE"
},
"webgl-MAX_TEXTURE_IMAGE_UNITS": {
"name": "MAX_TEXTURE_IMAGE_UNITS"
},
"webgl-MAX_TEXTURE_SIZE": {
"name": "MAX_TEXTURE_SIZE"
},
"webgl-MAX_VIEWPORT_DIMS": {
"name": "MAX_VIEWPORT_DIMS"
},
"webgl-RED_BITS": {
"name": "RED_BITS"
},
"webgl-STENCIL_BITS": {
"name": "STENCIL_BITS"
},
"webgl-SUBPIXEL_BITS": {
"name": "SUBPIXEL_BITS"
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl-shader-limits",
"inputs": {
"webgl-MAX_FRAGMENT_UNIFORM_VECTORS": {
"name": "MAX_FRAGMENT_UNIFORM_VECTORS"
},
"webgl-MAX_VARYING_VECTORS": {
"name": "MAX_VARYING_VECTORS"
},
"webgl-MAX_VERTEX_ATTRIBS": {
"name": "MAX_VERTEX_ATTRIBS"
},
"webgl-MAX_VERTEX_TEXTURE_IMAGE_UNITS": {
"name": "MAX_VERTEX_TEXTURE_IMAGE_UNITS"
},
"webgl-MAX_VERTEX_UNIFORM_VECTORS": {
"name": "MAX_VERTEX_UNIFORM_VECTORS"
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl-extensions",
"inputs": {
"webgl-extensions": null
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl-precision",
"inputs": {
"webgl-FRAGMENT_SHADER-HIGH_FLOAT": {
"stage": "FRAGMENT_SHADER",
"precision": "HIGH_FLOAT"
},
"webgl-FRAGMENT_SHADER-HIGH_INT": {
"stage": "FRAGMENT_SHADER",
"precision": "HIGH_INT"
},
"webgl-FRAGMENT_SHADER-LOW_FLOAT": {
"stage": "FRAGMENT_SHADER",
"precision": "LOW_FLOAT"
},
"webgl-FRAGMENT_SHADER-LOW_INT": {
"stage": "FRAGMENT_SHADER",
"precision": "LOW_INT"
},
"webgl-FRAGMENT_SHADER-MEDIUM_FLOAT": {
"stage": "FRAGMENT_SHADER",
"precision": "MEDIUM_FLOAT"
},
"webgl-FRAGMENT_SHADER-MEDIUM_INT": {
"stage": "FRAGMENT_SHADER",
"precision": "MEDIUM_INT"
},
"webgl-VERTEX_SHADER-HIGH_FLOAT": {
"stage": "VERTEX_SHADER",
"precision": "HIGH_FLOAT"
},
"webgl-VERTEX_SHADER-HIGH_INT": {
"stage": "VERTEX_SHADER",
"precision": "HIGH_INT"
},
"webgl-VERTEX_SHADER-LOW_FLOAT": {
"stage": "VERTEX_SHADER",
"precision": "LOW_FLOAT"
},
"webgl-VERTEX_SHADER-LOW_INT": {
"stage": "VERTEX_SHADER",
"precision": "LOW_INT"
},
"webgl-VERTEX_SHADER-MEDIUM_FLOAT": {
"stage": "VERTEX_SHADER",
"precision": "MEDIUM_FLOAT"
},
"webgl-VERTEX_SHADER-MEDIUM_INT": {
"stage": "VERTEX_SHADER",
"precision": "MEDIUM_INT"
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl-renderer",
"inputs": {
"webgl-debug": {
"extension": "WEBGL_debug_renderer_info"
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl2-context",
"inputs": {
"webgl2-context": {
"kind": "webgl2",
"requested": {
"alpha": false,
"antialias": false,
"depth": false,
"stencil": false,
"preserveDrawingBuffer": true
},
"dimensions": [
1,
1
]
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl2-render-limits",
"inputs": {
"webgl2-ALIASED_LINE_WIDTH_RANGE": {
"name": "ALIASED_LINE_WIDTH_RANGE"
},
"webgl2-ALIASED_POINT_SIZE_RANGE": {
"name": "ALIASED_POINT_SIZE_RANGE"
},
"webgl2-ALPHA_BITS": {
"name": "ALPHA_BITS"
},
"webgl2-BLUE_BITS": {
"name": "BLUE_BITS"
},
"webgl2-DEPTH_BITS": {
"name": "DEPTH_BITS"
},
"webgl2-GREEN_BITS": {
"name": "GREEN_BITS"
},
"webgl2-MAX_3D_TEXTURE_SIZE": {
"name": "MAX_3D_TEXTURE_SIZE"
},
"webgl2-MAX_ARRAY_TEXTURE_LAYERS": {
"name": "MAX_ARRAY_TEXTURE_LAYERS"
},
"webgl2-MAX_COLOR_ATTACHMENTS": {
"name": "MAX_COLOR_ATTACHMENTS"
},
"webgl2-MAX_COMBINED_TEXTURE_IMAGE_UNITS": {
"name": "MAX_COMBINED_TEXTURE_IMAGE_UNITS"
},
"webgl2-MAX_CUBE_MAP_TEXTURE_SIZE": {
"name": "MAX_CUBE_MAP_TEXTURE_SIZE"
},
"webgl2-MAX_DRAW_BUFFERS": {
"name": "MAX_DRAW_BUFFERS"
},
"webgl2-MAX_ELEMENTS_INDICES": {
"name": "MAX_ELEMENTS_INDICES"
},
"webgl2-MAX_ELEMENTS_VERTICES": {
"name": "MAX_ELEMENTS_VERTICES"
},
"webgl2-MAX_ELEMENT_INDEX": {
"name": "MAX_ELEMENT_INDEX"
},
"webgl2-MAX_PROGRAM_TEXEL_OFFSET": {
"name": "MAX_PROGRAM_TEXEL_OFFSET"
},
"webgl2-MAX_RENDERBUFFER_SIZE": {
"name": "MAX_RENDERBUFFER_SIZE"
},
"webgl2-MAX_SAMPLES": {
"name": "MAX_SAMPLES"
},
"webgl2-MAX_SERVER_WAIT_TIMEOUT": {
"name": "MAX_SERVER_WAIT_TIMEOUT"
},
"webgl2-MAX_TEXTURE_IMAGE_UNITS": {
"name": "MAX_TEXTURE_IMAGE_UNITS"
},
"webgl2-MAX_TEXTURE_SIZE": {
"name": "MAX_TEXTURE_SIZE"
},
"webgl2-MAX_VIEWPORT_DIMS": {
"name": "MAX_VIEWPORT_DIMS"
},
"webgl2-MIN_PROGRAM_TEXEL_OFFSET": {
"name": "MIN_PROGRAM_TEXEL_OFFSET"
},
"webgl2-RED_BITS": {
"name": "RED_BITS"
},
"webgl2-STENCIL_BITS": {
"name": "STENCIL_BITS"
},
"webgl2-SUBPIXEL_BITS": {
"name": "SUBPIXEL_BITS"
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl2-shader-limits",
"inputs": {
"webgl2-MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS": {
"name": "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS"
},
"webgl2-MAX_COMBINED_UNIFORM_BLOCKS": {
"name": "MAX_COMBINED_UNIFORM_BLOCKS"
},
"webgl2-MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS": {
"name": "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS"
},
"webgl2-MAX_FRAGMENT_INPUT_COMPONENTS": {
"name": "MAX_FRAGMENT_INPUT_COMPONENTS"
},
"webgl2-MAX_FRAGMENT_UNIFORM_BLOCKS": {
"name": "MAX_FRAGMENT_UNIFORM_BLOCKS"
},
"webgl2-MAX_FRAGMENT_UNIFORM_COMPONENTS": {
"name": "MAX_FRAGMENT_UNIFORM_COMPONENTS"
},
"webgl2-MAX_FRAGMENT_UNIFORM_VECTORS": {
"name": "MAX_FRAGMENT_UNIFORM_VECTORS"
},
"webgl2-MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS": {
"name": "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS"
},
"webgl2-MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS": {
"name": "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS"
},
"webgl2-MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS": {
"name": "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS"
},
"webgl2-MAX_UNIFORM_BLOCK_SIZE": {
"name": "MAX_UNIFORM_BLOCK_SIZE"
},
"webgl2-MAX_UNIFORM_BUFFER_BINDINGS": {
"name": "MAX_UNIFORM_BUFFER_BINDINGS"
},
"webgl2-MAX_VARYING_COMPONENTS": {
"name": "MAX_VARYING_COMPONENTS"
},
"webgl2-MAX_VARYING_VECTORS": {
"name": "MAX_VARYING_VECTORS"
},
"webgl2-MAX_VERTEX_ATTRIBS": {
"name": "MAX_VERTEX_ATTRIBS"
},
"webgl2-MAX_VERTEX_OUTPUT_COMPONENTS": {
"name": "MAX_VERTEX_OUTPUT_COMPONENTS"
},
"webgl2-MAX_VERTEX_TEXTURE_IMAGE_UNITS": {
"name": "MAX_VERTEX_TEXTURE_IMAGE_UNITS"
},
"webgl2-MAX_VERTEX_UNIFORM_BLOCKS": {
"name": "MAX_VERTEX_UNIFORM_BLOCKS"
},
"webgl2-MAX_VERTEX_UNIFORM_COMPONENTS": {
"name": "MAX_VERTEX_UNIFORM_COMPONENTS"
},
"webgl2-MAX_VERTEX_UNIFORM_VECTORS": {
"name": "MAX_VERTEX_UNIFORM_VECTORS"
},
"webgl2-UNIFORM_BUFFER_OFFSET_ALIGNMENT": {
"name": "UNIFORM_BUFFER_OFFSET_ALIGNMENT"
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl2-extensions",
"inputs": {
"webgl2-extensions": null
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl2-precision",
"inputs": {
"webgl2-FRAGMENT_SHADER-HIGH_FLOAT": {
"stage": "FRAGMENT_SHADER",
"precision": "HIGH_FLOAT"
},
"webgl2-FRAGMENT_SHADER-HIGH_INT": {
"stage": "FRAGMENT_SHADER",
"precision": "HIGH_INT"
},
"webgl2-FRAGMENT_SHADER-LOW_FLOAT": {
"stage": "FRAGMENT_SHADER",
"precision": "LOW_FLOAT"
},
"webgl2-FRAGMENT_SHADER-LOW_INT": {
"stage": "FRAGMENT_SHADER",
"precision": "LOW_INT"
},
"webgl2-FRAGMENT_SHADER-MEDIUM_FLOAT": {
"stage": "FRAGMENT_SHADER",
"precision": "MEDIUM_FLOAT"
},
"webgl2-FRAGMENT_SHADER-MEDIUM_INT": {
"stage": "FRAGMENT_SHADER",
"precision": "MEDIUM_INT"
},
"webgl2-VERTEX_SHADER-HIGH_FLOAT": {
"stage": "VERTEX_SHADER",
"precision": "HIGH_FLOAT"
},
"webgl2-VERTEX_SHADER-HIGH_INT": {
"stage": "VERTEX_SHADER",
"precision": "HIGH_INT"
},
"webgl2-VERTEX_SHADER-LOW_FLOAT": {
"stage": "VERTEX_SHADER",
"precision": "LOW_FLOAT"
},
"webgl2-VERTEX_SHADER-LOW_INT": {
"stage": "VERTEX_SHADER",
"precision": "LOW_INT"
},
"webgl2-VERTEX_SHADER-MEDIUM_FLOAT": {
"stage": "VERTEX_SHADER",
"precision": "MEDIUM_FLOAT"
},
"webgl2-VERTEX_SHADER-MEDIUM_INT": {
"stage": "VERTEX_SHADER",
"precision": "MEDIUM_INT"
}
},
"controls": {}
},
{
"key": "webgl.capabilities.webgl2-renderer",
"inputs": {
"webgl2-debug": {
"extension": "WEBGL_debug_renderer_info"
}
},
"controls": {}
}
]One collector runs per invocation. Results and JSON select this signal’s fields; any companions execute in the same collector.
Generated source manifest lists runtime files, fixture URLs and content digests for this build. The Source tab provides a copyable console sample.
Run and edit locally
From the repository root, start the Astro app, then open /signals/webgl.capabilities. Edit the collector source and reload the page to load its new build.
pnpm run dev:webIn a browser module served by this repository’s Vite graph:
import { createCollector } from "/core/collect"
import { measurementModule } from "/core/signals/webgl/capabilities"
const signal = measurementModule
const collector = createCollector()
const suite = { signals: [signal] }
const result = await collector.collect(suite)Reuse the collector owner for repeated calls so collection can enforce cleanup. This returns the collector’s raw result; app/signals/projection.ts selects the retained fields shown on this page.
rg -n 'measurementModule' core app tests
pnpm run check
pnpm run test tests/unit/app/focused-projection.test.ts| Property | Value |
|---|