Documentation
    Preparing search index...

    Interface WebglContext

    The GL 2 entry points this package calls — the whole of them.

    Grouped by the module that uses each group, because that grouping is the package's internal layering: shaders and uniforms here, buffers and vertex arrays in gl-geometry.ts, per-frame state and draws in webgl-renderer.ts.

    Return types are narrowed relative to the WebIDL where the WebGL 2 specification pins the answer for the specific enumerant this package passes — getShaderParameter(shader, COMPILE_STATUS) is a GLboolean, so it is typed boolean — and left unknown where it does not (WebglContext.getParameter), so the caller has to narrow.

    interface WebglContext {
        clientWaitSync?: (
            sync: object,
            flags: number,
            timeout: number,
        ) => number;
        deleteSync?: (sync: object) => void;
        fenceSync?: (condition: number, flags: number) => object | null;
        getBufferSubData?: (
            target: number,
            sourceByteOffset: number,
            into: ArrayBufferView,
        ) => void;
        readPixels?: (
            x: number,
            y: number,
            width: number,
            height: number,
            format: number,
            type: number,
            into: number | ArrayBufferView<ArrayBufferLike>,
        ) => void;
        activeTexture(unit: number): void;
        attachShader(program: object, shader: object): void;
        beginQuery?(target: number, query: object): void;
        bindBuffer(target: number, buffer: object | null): void;
        bindBufferBase?(target: number, index: number, buffer: object | null): void;
        bindFramebuffer(target: number, framebuffer: object | null): void;
        bindRenderbuffer(target: number, renderbuffer: object | null): void;
        bindTexture(target: number, texture: object | null): void;
        bindVertexArray(array: object | null): void;
        blendFunc(sourceFactor: number, destinationFactor: number): void;
        bufferData(target: number, data: ArrayBufferView, usage: number): void;
        checkFramebufferStatus(target: number): number;
        clear(mask: number): void;
        clearColor(red: number, green: number, blue: number, alpha: number): void;
        clearDepth(depth: number): void;
        colorMask(
            red: boolean,
            green: boolean,
            blue: boolean,
            alpha: boolean,
        ): void;
        compileShader(shader: object): void;
        createBuffer(): object | null;
        createFramebuffer(): object | null;
        createProgram(): object | null;
        createQuery?(): object | null;
        createRenderbuffer(): object | null;
        createShader(type: number): object | null;
        createTexture(): object | null;
        createVertexArray(): object | null;
        deleteBuffer(buffer: object): void;
        deleteFramebuffer(framebuffer: object): void;
        deleteProgram(program: object): void;
        deleteQuery?(query: object): void;
        deleteRenderbuffer(renderbuffer: object): void;
        deleteShader(shader: object): void;
        deleteTexture(texture: object): void;
        deleteVertexArray(array: object): void;
        depthFunc(func: number): void;
        depthMask(enabled: boolean): void;
        disable(capability: number): void;
        drawArrays(mode: number, first: number, count: number): void;
        drawElements(
            mode: number,
            count: number,
            type: number,
            offset: number,
        ): void;
        enable(capability: number): void;
        enableVertexAttribArray(index: number): void;
        endQuery?(target: number): void;
        framebufferRenderbuffer(
            target: number,
            attachment: number,
            renderbufferTarget: number,
            renderbuffer: object | null,
        ): void;
        framebufferTexture2D(
            target: number,
            attachment: number,
            textureTarget: number,
            texture: object | null,
            level: number,
        ): void;
        frontFace(mode: number): void;
        generateMipmap?(target: number): void;
        getExtension?(name: string): unknown;
        getParameter(pname: number): unknown;
        getProgramInfoLog(program: object): string | null;
        getProgramParameter(program: object, pname: number): boolean;
        getQueryParameter?(query: object, pname: number): unknown;
        getShaderInfoLog(shader: object): string | null;
        getShaderParameter(shader: object, pname: number): boolean;
        getUniformBlockIndex?(program: object, name: string): number;
        getUniformLocation(program: object, name: string): object | null;
        isContextLost(): boolean;
        linkProgram(program: object): void;
        renderbufferStorage(
            target: number,
            internalFormat: number,
            width: number,
            height: number,
        ): void;
        scissor(x: number, y: number, width: number, height: number): void;
        shaderSource(shader: object, source: string): void;
        stencilFunc(func: number, ref: number, mask: number): void;
        stencilMask(mask: number): void;
        stencilOp(fail: number, depthFail: number, pass: number): void;
        texImage2D(
            target: number,
            level: number,
            internalFormat: number,
            width: number,
            height: number,
            border: number,
            format: number,
            type: number,
            pixels: ArrayBufferView<ArrayBufferLike> | null,
        ): void;
        texParameteri(target: number, pname: number, param: number): void;
        texSubImage2D?(
            target: number,
            level: number,
            x: number,
            y: number,
            width: number,
            height: number,
            format: number,
            type: number,
            pixels: ArrayBufferView,
        ): void;
        uniform1f(location: object, value: number): void;
        uniform1i(location: object, value: number): void;
        uniform3fv(location: object, data: Float32Array): void;
        uniform4fv(location: object, data: Float32Array): void;
        uniformBlockBinding?(program: object, index: number, binding: number): void;
        uniformMatrix3fv(
            location: object,
            transpose: boolean,
            data: Float32Array,
        ): void;
        uniformMatrix4fv(
            location: object,
            transpose: boolean,
            data: Float32Array,
        ): void;
        useProgram(program: object | null): void;
        vertexAttribPointer(
            index: number,
            size: number,
            type: number,
            normalized: boolean,
            stride: number,
            offset: number,
        ): void;
        viewport(x: number, y: number, width: number, height: number): void;
    }

    Hierarchy (View Summary)

    Index
    clientWaitSync?: (sync: object, flags: number, timeout: number) => number

    Polls sync without blocking (timeout is 0 in this package — a blocking client wait would be the stall the fence path exists to avoid). Returns one of ALREADY_SIGNALED / TIMEOUT_EXPIRED / CONDITION_SATISFIED / WAIT_FAILED (PICKING_GL, gl-picking.ts).

    deleteSync?: (sync: object) => void
    fenceSync?: (condition: number, flags: number) => object | null

    Inserts a fence the GPU signals when prior commands complete.

    getBufferSubData?: (
        target: number,
        sourceByteOffset: number,
        into: ArrayBufferView,
    ) => void

    Copies the bound PIXEL_PACK_BUFFER's bytes back to the CPU.

    readPixels?: (
        x: number,
        y: number,
        width: number,
        height: number,
        format: number,
        type: number,
        into: number | ArrayBufferView<ArrayBufferLike>,
    ) => void

    Reads one rectangle of the bound framebuffer (§71's id read-back; RFC 0005 Q5's adopted disposition: the single-texel path, deliberately not §61's readPixels(target, region) — that member still waits on Rectangle2). into is a destination view for the direct, stalling form, or a byte offset into the bound PIXEL_PACK_BUFFER for the non-stalling fence form — WebGL 2's own two overloads, collapsed.

    • Parameters

      • unit: number

      Returns void

    • Parameters

      • program: object
      • shader: object

      Returns void

    • Starts TIME_ELAPSED_EXT accumulation into query.

      Parameters

      • target: number
      • query: object

      Returns void

    • Parameters

      • target: number
      • buffer: object | null

      Returns void

    • Parameters

      • target: number
      • index: number
      • buffer: object | null

      Returns void

    • Binds framebuffer for drawing, or null for the default drawing buffer — the canvas (§61).

      target is always GL.FRAMEBUFFER in this tier: WebGL 2 can bind separate read and draw framebuffers, and the packet that needs that split (a multisample resolve blit, readPixels off a non-current target) is the one that will pass anything else.

      Parameters

      • target: number
      • framebuffer: object | null

      Returns void

    • Parameters

      • target: number
      • renderbuffer: object | null

      Returns void

    • Parameters

      • target: number
      • texture: object | null

      Returns void

    • Parameters

      • array: object | null

      Returns void

    • Parameters

      • sourceFactor: number
      • destinationFactor: number

      Returns void

    • Parameters

      • target: number
      • data: ArrayBufferView
      • usage: number

      Returns void

    • Reports whether the bound framebuffer is usable. Narrowed to number (WebIDL GLenum); the caller compares it against GL.FRAMEBUFFER_COMPLETE and refuses to draw into anything else.

      Parameters

      • target: number

      Returns number

    • Parameters

      • mask: number

      Returns void

    • Parameters

      • red: number
      • green: number
      • blue: number
      • alpha: number

      Returns void

    • Parameters

      • depth: number

      Returns void

    • Enables or disables writing each colour channel (§57's colorWrite).

      Per-channel in GL; this tier only ever sets all four together, because §57 declares one boolean. A per-channel mask is what a later colorWrite carrying a channel set would drive.

      Parameters

      • red: boolean
      • green: boolean
      • blue: boolean
      • alpha: boolean

      Returns void

    • Parameters

      • shader: object

      Returns void

    • Returns object | null

    • Allocates an elapsed-time query object.

      Returns object | null

    • Returns object | null

    • Parameters

      • type: number

      Returns object | null

    • Returns object | null

    • Parameters

      • buffer: object

      Returns void

    • Parameters

      • framebuffer: object

      Returns void

    • Parameters

      • program: object

      Returns void

    • Releases query (§83).

      Parameters

      • query: object

      Returns void

    • Parameters

      • renderbuffer: object

      Returns void

    • Parameters

      • shader: object

      Returns void

    • Parameters

      • texture: object

      Returns void

    • Parameters

      • array: object

      Returns void

    • Parameters

      • func: number

      Returns void

    • Enables or disables writing to the depth buffer (§57's depthWrite).

      Separate from enable(DEPTH_TEST), which is what §57's depthTest controls: the usual transparent surface tests depth and does not write it, and only two GL entry points can say that.

      Parameters

      • enabled: boolean

      Returns void

    • Parameters

      • capability: number

      Returns void

    • Parameters

      • mode: number
      • first: number
      • count: number

      Returns void

    • Parameters

      • mode: number
      • count: number
      • type: number
      • offset: number

      Returns void

    • Parameters

      • capability: number

      Returns void

    • Parameters

      • index: number

      Returns void

    • Stops the active query of target.

      Parameters

      • target: number

      Returns void

    • Parameters

      • target: number
      • attachment: number
      • renderbufferTarget: number
      • renderbuffer: object | null

      Returns void

    • Parameters

      • target: number
      • attachment: number
      • textureTarget: number
      • texture: object | null
      • level: number

      Returns void

    • Parameters

      • mode: number

      Returns void

    • Builds the full mip chain of the bound texture (§77's mipmaps; R-30b, 2026-08-21).

      Optional, and its presence is the capability — the stance this package takes for every entry point that is not needed to draw a frame. WebGL 2 has it unconditionally; a double written before this field existed does not, and a texture asking for mipmaps: true against such a context uploads with one level and an in-level min filter (gl-texture.ts) rather than leaving GL a texture it would treat as incomplete and sample as black. Every existing double therefore keeps compiling and keeps issuing the call sequence it always did.

      Parameters

      • target: number

      Returns void

    • Requests an extension object, or null where the device has none (§62's capability tiers; R-30b).

      Optional for WebglContext.generateMipmap's reason, and called lazily: the one caller today is the texture cache, on the first texture that asks for anisotropy above 1, so a context that never meets one issues no query at all and every already-recorded GL transcript is unchanged. The return is unknown because this package must not name a lib.dom type; the caller checks it for null and reads the enum it needs off GL.

      Parameters

      • name: string

      Returns unknown

    • Parameters

      • pname: number

      Returns unknown

    • Parameters

      • program: object

      Returns string | null

    • Parameters

      • program: object
      • pname: number

      Returns boolean

    • Reads QUERY_RESULT_AVAILABLE (boolean) or QUERY_RESULT (nanoseconds) from a completed query. Typed unknown so the caller narrows, same as WebglContext.getParameter.

      Parameters

      • query: object
      • pname: number

      Returns unknown

    • Parameters

      • shader: object

      Returns string | null

    • Parameters

      • shader: object
      • pname: number

      Returns boolean

    • Optional on structural test contexts; required by opt-in node std140.

      Parameters

      • program: object
      • name: string

      Returns number

    • Parameters

      • program: object
      • name: string

      Returns object | null

    • Parameters

      • program: object

      Returns void

    • Parameters

      • target: number
      • internalFormat: number
      • width: number
      • height: number

      Returns void

    • Parameters

      • x: number
      • y: number
      • width: number
      • height: number

      Returns void

    • Parameters

      • shader: object
      • source: string

      Returns void

    • Sets the stencil comparison for both faces (§67's func, ref, readMask).

      Both faces, always: this backend leaves CULL_FACE disabled and draws every polygon with one state, so the two-sided stencilFuncSeparate — the entry point a shadow-volume or a non-zero-winding fill pass needs — would be a second way to say the same thing until such a pass exists.

      Parameters

      • func: number
      • ref: number
      • mask: number

      Returns void

    • Sets the bits a stencil write — including clear(STENCIL_BUFFER_BIT) — may change (§67's writeMask).

      The clear is the trap and is why this is a mirrored value rather than a per-draw call: GL masks the clear with this too, so a frame that ended with a read-only mask material would clear nothing at all the next time round. webgl-renderer.ts puts it back before every clear, and with no stencil in the frame that comparison issues no call.

      Parameters

      • mask: number

      Returns void

    • Sets what a stencil-fail, depth-fail, and pass store, for both faces (WebglContext.stencilFunc's reason).

      Parameters

      • fail: number
      • depthFail: number
      • pass: number

      Returns void

    • The nine-argument, explicitly sized form — the only one this tier calls. pixels is null for a texture with no CPU-side data, which allocates zero-filled storage (§77).

      Parameters

      • target: number
      • level: number
      • internalFormat: number
      • width: number
      • height: number
      • border: number
      • format: number
      • type: number
      • pixels: ArrayBufferView<ArrayBufferLike> | null

      Returns void

    • Parameters

      • target: number
      • pname: number
      • param: number

      Returns void

    • Updates existing RGBA8 storage without reallocating it.

      Parameters

      • target: number
      • level: number
      • x: number
      • y: number
      • width: number
      • height: number
      • format: number
      • type: number
      • pixels: ArrayBufferView

      Returns void

    • Uploads one float uniform.

      Added with §59's standard pipeline (R-13, 2026-08-08), which is the first one to carry a scalar the shader reads on its own — metalness and roughness. Packing the two into a vec3 would have kept this interface unchanged; two named scalars are what the shader actually declares, and this interface exists precisely so a new entry point is an explicit, reviewable growth of the package's GL budget rather than a silent one (see the module header).

      Parameters

      • location: object
      • value: number

      Returns void

    • Parameters

      • location: object
      • value: number

      Returns void

    • Parameters

      • location: object
      • data: Float32Array

      Returns void

    • Parameters

      • location: object
      • data: Float32Array

      Returns void

    • Parameters

      • program: object
      • index: number
      • binding: number

      Returns void

    • Uploads one mat3 uniform, column-major.

      Added with the lit/standard normal-matrix hoist (2026-09-09): those two vertex stages used to derive transpose(inverse(mat3(model))) per vertex, and now consume a per-draw 9-float upload. Growing this interface is the same explicit budget bump uniform1f documented when §59 landed — a new entry point rather than packing the 3×3 into a mat4. The node-material pipeline still pads mat3 to mat4 so its transcripts stay untouched.

      Parameters

      • location: object
      • transpose: boolean
      • data: Float32Array

      Returns void

    • Parameters

      • location: object
      • transpose: boolean
      • data: Float32Array

      Returns void

    • Parameters

      • program: object | null

      Returns void

    • Parameters

      • index: number
      • size: number
      • type: number
      • normalized: boolean
      • stride: number
      • offset: number

      Returns void

    • Parameters

      • x: number
      • y: number
      • width: number
      • height: number

      Returns void