melonJS
    Preparing search index...

    Class WebGLBatcher

    The base WebGL Batcher — manages shader programs, vertex attribute definitions, and vertex buffer batching for efficient GPU draw calls, realizing the backend-neutral Batcher lifecycle on GL state. Custom WebGL batchers extend this class.

    Hierarchy (View Summary)

    Index
    attributes: Object[] | undefined

    an array of vertex attribute properties

    WebGLBatcher.addAttribute

    currentSamplerUnit: number | undefined
    currentShader: GLShader | undefined

    the shader currently used by this batcher

    defaultShader: GLShader | undefined

    the default shader created by this batcher

    gl: any
    projectionUniform: string | undefined

    the name of the projection matrix uniform in the shader

    renderer: Renderer | undefined

    the renderer this batcher is bound to

    stride: number | undefined

    the stride of a single vertex in bytes (will automatically be calculated as attributes definitions are added)

    WebGLBatcher.addAttribute

    useIndexBuffer: boolean | undefined

    whether this batcher uses indexed drawing

    validatedShaders: WeakSet<object> | undefined
    vertexData: VertexArrayBuffer | undefined

    the vertex data buffer used by this batcher

    vertexSize: number | undefined

    the size of a single vertex in floats (will automatically be calculated as attributes definitions are added)

    WebGLBatcher.addAttribute

    vertexState: WebGLVertexState | null | undefined
    viewMatrix: Matrix3d | undefined
    • Add a vertex attribute to this batcher's layout.

      Accepts either vocabulary. The backend-neutral form names the component type and count in one token, which is what a non-WebGL backend can consume directly and what lets a layout be written without a live rendering context:

      batcher.addAttribute({ name: "aColor", format: "unorm8x4", offset: 20 });
      batcher.addAttribute("aColor", "unorm8x4", 20);

      The GL form is supported indefinitely and behaves exactly as before:

      batcher.addAttribute("aColor", 4, gl.UNSIGNED_BYTE, true, 20);
      

      Records keep both spellings, so existing readers of size / type / normalized are unaffected. A GL combination with no portable name — three-component 8- and 16-bit types, which the neutral vocabulary does not define — is stored with format: undefined rather than an invented name that a backend could not honour.

      The layout is frozen once init() has built the vertex state, and each record is frozen on insertion: a batcher rebuilds its vertex state from these records after a context loss, so a later mutation would take effect at restore time rather than where it was written.

      Parameters

      • name: string | object

        attribute name, or a descriptor object

      • Optionalsize: number | VertexFormat

        component count (GL form), or the format (neutral form)

      • Optionaltype: number

        component type (GL form), or the byte offset (neutral form)

      • Optionalnormalized: boolean

        whether integers are scaled into [0, 1] / [-1, 1] (GL form only)

      • Optionaloffset: number

        byte offset of the attribute within a vertex (GL form)

      • ...args: any[]

      Returns void

      when the layout is frozen, the format or GL type is unknown, or a descriptor contradicts itself

    • Add index values to the index buffer (only for indexed batchers). Indices are rebased relative to the current vertex count.

      Parameters

      • indices: number[]

        array of index values to add

      Returns void

    • Initialize the batcher (called by the constructor)

      Parameters

      • renderer: WebGLRenderer

        the current WebGL renderer session

      • settings: {
            attributes: {
                name: string;
                normalized: boolean;
                offset: number;
                size: number;
                type: number;
            }[];
            indexed?: boolean;
            maxVertices?: number;
            projectionUniform?: string;
            shader: { fragment: string; vertex: string };
        }

        additional settings to initialize this batcher

        • attributes: {
              name: string;
              normalized: boolean;
              offset: number;
              size: number;
              type: number;
          }[]

          an array of attributes definition

        • Optionalindexed?: boolean

          whether this batcher uses an index buffer for indexed drawing (drawElements)

        • OptionalmaxVertices?: number

          the maximum number of vertices this batcher can hold

        • OptionalprojectionUniform?: string

          the name of the projection matrix uniform in the shader

        • shader: { fragment: string; vertex: string }

          shader definition

          • fragment: string

            a string containing the GLSL source code to set

          • vertex: string

            a string containing the GLSL source code to set

      Returns void

    • called by the WebGL renderer when this batcher is being replaced by another. Attribute state no longer needs disabling — it lives in this batcher's vertex-state object and the incoming batcher's bind() replaces the binding wholesale. Kept as a lifecycle hook: subclasses override it to restore mode-specific GL state (see MeshBatcher's blend/depth restore).

      Returns void