shader.js

0.0.4 • Public • Published

shader.js

Browserify-compatible webgl shader objects.

 
var shader = require('shader.js')
  , canvas = document.createElement('canvas')
  , gl = canvas.getContext('experimental-webgl')
  , Shader = shader(gl)
 
Shader.fromURLs('vertex.vs', 'fragment.fs', function(err, shader) {
  gl.useProgram(shader.handle())
 
  shader.attribute('position', myGLVBO)
  shader.uniform('clock', Date.now())
 
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 6)
})
 

API

require('shader.js') -> function shader(gl){}

Returns a function that accepts a WebGL context and returns the Shader constructor function.

shader(gl) -> Shader

Returns the Shader constructor when provided a gl context.

Shader.fromURLs(vertexURL, fragmentURL, ready) -> undefined

Creates a Shader instance with the vertex and fragment shaders provided by the two URL arguments. ready is a standard node-style callback: function(err, shader) { }.

Shader.fromIds(vertexID, fragmentID, ready) -> undefined

Creates a Shader instance with the vertex and fragment shaders provided by the two DOM elements represented by vertexID and fragmentID. ready is a standard node-style callback: function(err, shader) { }.

new Shader(vertexSRC, fragmentSRC) -> Shader instance

Create a new WebGL shader provided the source of the vertex and fragment shaders.

Shader#handle() -> WebGL program handle

Returns a handle suitable for passing to gl.useProgram.

// e.g.,
gl.useProgram(shader.handle())

Shader#uniform(uniformName, value) -> undefined

Provides a uniform value to the GPU; relies on introspection of shader source code. Maps the following types to the following calls:

  • vec2: gl.uniform2fv
  • vec3: gl.uniform3fv
  • vec4: gl.uniform4fv
  • mat4: gl.uniformMatrix4fv
  • float: gl.uniform1f
  • int: gl.uniform1i
  • sampler2D: gl.uniform1i

Usage with texture.js:

  // sets `texture` to point at gl.TEXTURE1 with the contents of `myTexture`
  shader.uniform('texture', myTexture.enable(1))

Shader#attribute(attributeName[, type, normalized, stride, offset]) -> undefined

Describes attributes of the vertex stream to the shader.

Automatically detects desired width of incoming data based on source introspection.

Does not bind the buffer for you automatically -- you have to do that yourself ahead of time.

Roughly equivalent to:

  var attribLocation = gl.getAttribLocation(programID, 'ATTRIBUTE')
    , WIDTH = 4 // vec2 -> 2, vec3 -> 3, vec4 -> 4
 
  gl.enableVertexAttribArray(attribLocation)
  gl.vertexAttribPointer(attribLocation, width, type || gl.FLOAT, normalized || false, stride || 0, offset || 0)
  gl.bindAttribLocation(programID, attribLocation, 'ATTRIBUTE')
 

Shader#vertex() -> vertex shader source

Returns the program's vertex shader source.

Shader#vertex(src) -> src

Sets the program's vertex shader source.

NB:

This recompiles the shader: you will have to call gl.useProgram(shader.handle()) again after calling this method.

Shader#fragment() -> fragment shader source

Returns the program's fragment shader source.

Shader#vertex(src) -> src

Sets the program's fragment shader source.

NB:

This recompiles the shader: you will have to call gl.useProgram(shader.handle()) again after calling this method.

Readme

Keywords

none

Package Sidebar

Install

npm i shader.js

Weekly Downloads

0

Version

0.0.4

License

MIT

Last publish

Collaborators

  • chrisdickinson