gpt4 book ai didi

webgl - 如何在 WebGL 中获取程序的所有属性绑定(bind)?

转载 作者:行者123 更新时间:2023-12-02 01:11:24 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com