作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WebGL 应用程序,其中一些属性通过 getAttribLocation 绑定(bind)到程序,一些属性通过 bindAttribLocation 绑定(bind)到程序。
有没有一种方法可以将所有字符串名称映射到程序的属性索引/值?另外,我什么时候可以这样做?我认为 getAttribLocation 可以在程序链接后调用,对吗?
最佳答案
是的,你可以做到这一点。这是我的 Cubes 中的代码摘录,它既绑定(bind)了一些属性又查找了其他属性的索引:
for (var attribName in boundAttribLocations) {
var index = boundAttribLocations[attribName];
if (typeof index === "number") {
gl.bindAttribLocation(program, index, attribName);
} else {
if (typeof console !== "undefined") {
console.warn("Enumerable non-number", attribName, "in boundAttribLocations object", boundAttribLocations);
}
}
}
gl.linkProgram(program);
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
throw new Error(gl.getProgramInfoLog(program));
}
var i, name;
var attribs = Object.create(boundAttribLocations);
for (i = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES) - 1; i >= 0; i--) {
name = gl.getActiveAttrib(program, i).name;
attribs[name] = gl.getAttribLocation(program, name);
}
如果我没记错的话,boundAttribLocations
(Object.create
) 的继承使得 attribs
将包含所有绑定(bind)属性的有效位置,包括当前着色器未使用的那些,GL 不会使用 getActiveAttrib
枚举。
关于webgl - 如何在 WebGL 中获取程序的所有属性绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17055606/
我是一名优秀的程序员,十分优秀!