1.1.2 • Published 9 years ago

gl-shader-extract v1.1.2

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

gl-shader-extract

stable

Extracts active uniforms and attributes from a compiled WebGLProgram at runtime and normalizes their types to match GLSL syntax.

For an offline version, see glsl-extract.

Example

var extract = require('gl-shader-extract')

var fragSource = 'void main()'
var vertSource = `
  attribute vec4 position;
  uniform mat4 projection;
  void main() { 
    gl_Position = projection * position;
  }
`

//compile the source into a WebGLProgram object
var program = ...

//get the uniforms and attributes
var data = extract(gl, program)

console.log(data.attributes[0]) 
// { type: "vec4", name: 'position' }

console.log(data.uniforms[0]) 
// { type: "mat4", name: 'projection' }

Usage

NPM

Install

npm install gl-shader-extract --save

API

data = extract(gl, program)

Extracts the type and name from each uniform/attribute that was active in the shader. The returned data looks like this:

{
  attributes: [ { name: 'position', type: 'vec4' } ],
  uniforms: [ { name: 'projection', type: 'mat4' } ]
}

uniforms = extract.uniforms(gl, program)

As above, but only extracts the uniforms array.

attributes = extract.attributes(gl, program)

As above, but only extracts the attributes array.

Type Mapping

getProgramParameternormalized
FLOAT_VEC2vec2
FLOAT_VEC3vec3
FLOAT_VEC4vec4
INTint
INT_VEC2ivec2
INT_VEC3ivec3
INT_VEC4ivec4
BOOLbool
BOOL_VEC2bvec2
BOOL_VEC3bvec3
BOOL_VEC4bvec4
FLOAT_MAT2mat2
FLOAT_MAT3mat3
FLOAT_MAT4mat4
SAMPLER_2Dsampler2D
SAMPLER_CUBEsamplerCube

WebGL 2.0 Support

The following are also translated in WebGL2.

getProgramParameternormalized
FLOAT_MAT2x3mat2x3
FLOAT_MAT2x4mat2x4
FLOAT_MAT3x2mat3x2
FLOAT_MAT3x4mat3x4
FLOAT_MAT4x2mat4x2
FLOAT_MAT4x3mat4x3
UNSIGNED_INTuint
UNSIGNED_INT_VEC2uvec2
UNSIGNED_INT_VEC3uvec3
UNSIGNED_INT_VEC4uvec4
UNSIGNED_INT_SAMPLER_2Dusampler2D
UNSIGNED_INT_SAMPLER_3Dusampler3D
UNSIGNED_INT_SAMPLER_2D_ARRAYusampler2DArray
UNSIGNED_INT_SAMPLER_CUBEusamplerCube
INT_SAMPLER_2Disampler2D
INT_SAMPLER_3Disampler3D
INT_SAMPLER_2D_ARRAYisampler2DArray
INT_SAMPLER_CUBEisamplerCube

Credits

This was pulled out from @mikolalysenko's gl-shader for use in other engines/frameworks.

License

MIT, see LICENSE.md for details.