luma.gl

Program

A Program contains a matched pair of vertex and fragment shaders that can be exectued on the GPU by calling Program.draw(). Programs handle compilation and linking of shaders, and store uniform values. They provide draw call which allows the application to run the shaders on specified input data.

Usage

Creating a program

  const program = new Program(gl, {
    id: 'my-program',
    vs: vertexShaderSourceString,
    fs: fragmentShaderSourceString
  });

Set or update uniforms, in this case world and projection matrices

program.setUniforms({
  uMVMatrix: view,
  uPMatrix: projection
});

Create a VertexArray to store buffer values for the vertices of a triangle and drawing

const program = new Program(gl, {vs, fs});

const vertexArray = new VertexArray(gl, {program});

vertexArray.setAttributes({
  aVertexPosition: new Buffer(gl, {data: new Float32Array([0, 1, 0, -1, -1, 0, 1, -1, 0])})
});

program.draw({vertexArray, ...});

Creating a program for transform feedback, specifying which varyings to use

const program = new Program(gl, {vs, fs, varyings: ['gl_Position']});

Members

Constructor

Program(gl : WebGLRenderingContext, props : Object)

Creates a new program using the supplied vertex and fragment shaders. The shaders are compiled into WebGLShaders and is created and the shaders are linked.

	const program = new Program(gl, {
    id: 'my-identifier',
    vs: vertexShaderSource,
    fs: fragmentShaderSource,
    varyings: ['gl_Position', 'vColor']
  });
GL.TRANSFORM_FEEDBACK_BUFFER_MODE Description
GL.SEPARATE_ATTRIBS One varying per buffer
GL.INTERLEAVED_ATTRIBS Multiple varyings per buffer

WebGL References WebGLProgram, gl.createProgram

delete() : Program

Deletes resources held by program. Note: Does not currently delete shaders (to enable shader caching).

Methods

initialize(props : Object) : Program

Relinks a program. Takes the same options as the constructor

setUniforms(uniforms : Object) : Program

Sets named uniforms from a map, ignoring names

gl.useProgram

draw(opts) : Program

Program.draw is the entry point for running shaders, rendering and (optionally calculating data using transform feedback techniques).

  Program.draw({
    vertexArray,

    uniforms = {},
    transformFeedback = null,
    samplers = {},
    parameters = {},

    drawMode = GL.TRIANGLES,
    vertexCount,
    offset = 0,
    isIndexed = false,
    indexType = GL.UNSIGNED_SHORT,
    isInstanced = false,
    instanceCount = 0,

    start = 0,
    end=
  })

Main parameters

Potentially autodeduced parameters

Parameters for drawing a limited range (WebGL2 only)

Returns: true if successful, false if draw call is blocked due to missing resources.

Notes:

The following WebGL APIs are called in this function:

gl.useProgram, gl.drawElements, gl.drawRangeElements (WebGL2), gl.drawArrays, gl.drawElementsInstanced (WebGL2), gl.drawArraysInstanced (WebGL2), gl.getExtension, ANGLE_instanced_arrays, gl.drawElementsInstancedANGLE, gl.drawArraysInstancedANGLE

Constants

Limits

Limit Value Description
GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS >= 0 (GLint)  
GL.MAX_RENDERBUFFER_SIZE >= 1 (GLint)  
GL.MAX_VARYING_VECTORS >= 8 (GLint)  
GL.MAX_VERTEX_ATTRIBS >= 8 (GLint)  
GL.MAX_VERTEX_UNIFORM_VECTORS >= 128 (GLint)  
GL.MAX_FRAGMENT_UNIFORM_VECTORS >= 16 (GLint)  
GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH (WebGL2) - -

Parameters

Use with Program.getParameter(parameter)

Parameter Type Description
GL.DELETE_STATUS GLboolean If true, program has been flagged for deletion (by calling Program.delete()), but the delete is pending because program is still part of current rendering state
GL.LINK_STATUS GLboolean Indicates whether last link operation was successful. Program linking is performed by luma on program initialization
GL.VALIDATE_STATUS GLboolean Result of last gl.validateProgram() operation
GL.ATTACHED_SHADERS GLint Number of attached shaders (0, 1 or 2)
GL.ACTIVE_ATTRIBUTES GLint Number of active attribute variables to a program
GL.ACTIVE_UNIFORMS GLint Number of active attribute variables to a program
GL.TRANSFORM_FEEDBACK_BUFFER_MODE GLenum (WebGL2) Buffer capture mode, GL.SEPARATE_ATTRIBS or GL.INTERLEAVED_ATTRIBS
GL.TRANSFORM_FEEDBACK_VARYINGS GLint (WebGL2) Number of varying variables to capture in transform feedback mode.
GL.ACTIVE_UNIFORM_BLOCKS GLint (WebGL2) Number of uniform blocks containing active uniforms.