UNPKG

1.81 kBJavaScriptView Raw
1'use strict'
2
3exports.uniforms = runtimeUniforms
4exports.attributes = runtimeAttributes
5
6var GL_TO_GLSL_TYPES = {
7 'FLOAT': 'float',
8 'FLOAT_VEC2': 'vec2',
9 'FLOAT_VEC3': 'vec3',
10 'FLOAT_VEC4': 'vec4',
11 'INT': 'int',
12 'INT_VEC2': 'ivec2',
13 'INT_VEC3': 'ivec3',
14 'INT_VEC4': 'ivec4',
15 'BOOL': 'bool',
16 'BOOL_VEC2': 'bvec2',
17 'BOOL_VEC3': 'bvec3',
18 'BOOL_VEC4': 'bvec4',
19 'FLOAT_MAT2': 'mat2',
20 'FLOAT_MAT3': 'mat3',
21 'FLOAT_MAT4': 'mat4',
22 'SAMPLER_2D': 'sampler2D',
23 'SAMPLER_CUBE':'samplerCube'
24}
25
26var GL_TABLE = null
27
28function getType(gl, type) {
29 if(!GL_TABLE) {
30 var typeNames = Object.keys(GL_TO_GLSL_TYPES)
31 GL_TABLE = {}
32 for(var i=0; i<typeNames.length; ++i) {
33 var tn = typeNames[i]
34 GL_TABLE[gl[tn]] = GL_TO_GLSL_TYPES[tn]
35 }
36 }
37 return GL_TABLE[type]
38}
39
40function runtimeUniforms(gl, program) {
41 var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS)
42 var result = []
43 for(var i=0; i<numUniforms; ++i) {
44 var info = gl.getActiveUniform(program, i)
45 if(info) {
46 var type = getType(gl, info.type)
47 if(info.size > 1) {
48 for(var j=0; j<info.size; ++j) {
49 result.push({
50 name: info.name.replace('[0]', '[' + j + ']'),
51 type: type
52 })
53 }
54 } else {
55 result.push({
56 name: info.name,
57 type: type
58 })
59 }
60 }
61 }
62 return result
63}
64
65function runtimeAttributes(gl, program) {
66 var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES)
67 var result = []
68 for(var i=0; i<numAttributes; ++i) {
69 var info = gl.getActiveAttrib(program, i)
70 if(info) {
71 result.push({
72 name: info.name,
73 type: getType(gl, info.type)
74 })
75 }
76 }
77 return result
78}