Documentation
    Preparing search index...

    Interface BatchGlContext

    The GL 2 entry point the batch path adds to WebglContext — the five-argument bufferSubData, declared here as an extension interface for the reason gl-particles.ts's ParticleGlContext declares its three: gl-program.ts's WebglContext is that module's written-down GL budget and widening it is a separate, mechanical change.

    A real WebGL2RenderingContext satisfies it, as does this backend's own context type (which already carries the same method for the particle path), so the renderer passes its context straight in.

    interface BatchGlContext {
        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;
        bufferSubData(
            target: number,
            dstByteOffset: number,
            data: ArrayBufferView,
            srcOffset: number,
            length: 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

    • Source offset and length are in elements of data, not bytes — deliberately not the three-argument form, which would need data.subarray(0, n) and allocate a view per batch per frame.

      Parameters

      • target: number
      • dstByteOffset: number
      • data: ArrayBufferView
      • srcOffset: number
      • length: 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

    • Returns object | null

    • Returns object | null

    • Allocates an elapsed-time query object.

      Returns object | null

    • Returns object | null

    • Parameters

      • type: number

      Returns object | null

    • 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

    • Returns boolean

    • 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