54

シェーダー プログラム オブジェクトで使用されるすべてのユニフォームと属性のリストを取得したいと考えています。 glGetAttribLocation()&glGetUniformLocation()を使用して文字列を場所にマップできますが、本当に欲しいのは、glsl コードを解析する必要のない文字列のリストです。

注: OpenGL 2.0 ではglGetObjectParameteriv()、 は に置き換えられglGetProgramiv()ます。そして列挙型はGL_ACTIVE_UNIFORMS&GL_ACTIVE_ATTRIBUTESです。

4

4 に答える 4

56
于 2012-09-26T22:49:38.947 に答える
20

WebGLでこれを行うためにこの質問を見つけた人のために、WebGLの同等物を次に示します。

var program = gl.createProgram();
// ...attach shaders, link...

var na = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
console.log(na, 'attributes');
for (var i = 0; i < na; ++i) {
  var a = gl.getActiveAttrib(program, i);
  console.log(i, a.size, a.type, a.name);
}
var nu = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
console.log(nu, 'uniforms');
for (var i = 0; i < nu; ++i) {
  var u = gl.getActiveUniform(program, i);
  console.log(i, u.size, u.type, u.name);
}
于 2012-09-26T21:46:52.763 に答える