extracts uniforms and attributes from a shader object
MIT License
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.
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' }
npm install gl-shader-extract --save
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.
getProgramParameter | normalized |
---|---|
FLOAT_VEC2 |
vec2 |
FLOAT_VEC3 |
vec3 |
FLOAT_VEC4 |
vec4 |
INT |
int |
INT_VEC2 |
ivec2 |
INT_VEC3 |
ivec3 |
INT_VEC4 |
ivec4 |
BOOL |
bool |
BOOL_VEC2 |
bvec2 |
BOOL_VEC3 |
bvec3 |
BOOL_VEC4 |
bvec4 |
FLOAT_MAT2 |
mat2 |
FLOAT_MAT3 |
mat3 |
FLOAT_MAT4 |
mat4 |
SAMPLER_2D |
sampler2D |
SAMPLER_CUBE |
samplerCube |
The following are also translated in WebGL2.
getProgramParameter | normalized |
---|---|
FLOAT_MAT2x3 |
mat2x3 |
FLOAT_MAT2x4 |
mat2x4 |
FLOAT_MAT3x2 |
mat3x2 |
FLOAT_MAT3x4 |
mat3x4 |
FLOAT_MAT4x2 |
mat4x2 |
FLOAT_MAT4x3 |
mat4x3 |
UNSIGNED_INT |
uint |
UNSIGNED_INT_VEC2 |
uvec2 |
UNSIGNED_INT_VEC3 |
uvec3 |
UNSIGNED_INT_VEC4 |
uvec4 |
UNSIGNED_INT_SAMPLER_2D |
usampler2D |
UNSIGNED_INT_SAMPLER_3D |
usampler3D |
UNSIGNED_INT_SAMPLER_2D_ARRAY |
usampler2DArray |
UNSIGNED_INT_SAMPLER_CUBE |
usamplerCube |
INT_SAMPLER_2D |
isampler2D |
INT_SAMPLER_3D |
isampler3D |
INT_SAMPLER_2D_ARRAY |
isampler2DArray |
INT_SAMPLER_CUBE |
isamplerCube |
This was pulled out from @mikolalysenko's gl-shader for use in other engines/frameworks.
MIT, see LICENSE.md for details.