gpt4 book ai didi

Webgl 的 getAttribLocation 奇怪地返回 -1

转载 作者:行者123 更新时间:2023-12-03 22:50:34 25 4
gpt4 key购买 nike

我已经设法隔离了这段代码中的问题:

var gl;
_main_web = function() {
gl = document.getElementById("canvas").getContext("experimental-webgl");

gl = WebGLDebugUtils.makeDebugContext(gl,
function (err, funcName, args) {
throw(WebGLDebugUtils.glEnumToString(err) + " was caused by call to " + funcName);
}
);

vert_shader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vert_shader,"attribute vec4 vertex;attribute vec2 uv; void main(void) {gl_Position = vertex;}\n");
gl.compileShader(vert_shader);
if( !gl.getShaderParameter(vert_shader,gl.COMPILE_STATUS ) ) {
throw 0;
}
frag_shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(frag_shader,"void main(void) { gl_FragColor = vec4(1.0,1.0,1.0,1.0); } \n");
gl.compileShader(frag_shader);
if( !gl.getShaderParameter(frag_shader,gl.COMPILE_STATUS) ) {
throw 1;
}
program = gl.createProgram();
gl.attachShader(program,vert_shader);
gl.attachShader(program,frag_shader);
gl.linkProgram(program);
if( !gl.getProgramParameter(program,gl.LINK_STATUS) ) {
throw 2;
}

vertexLocation = gl.getAttribLocation(program,"vertex");
textureLocation = gl.getAttribLocation(program,"uv");
}

vertexLocation 没问题,它是 0。但是 textureLocation 是 -1,我错过了什么?

最佳答案

您正在尝试获取您声明但从未使用的属性的位置。您的顶点着色器代码是(为清晰起见进行了扩展):

attribute vec4 vertex;
attribute vec2 uv;
void main(void) {
gl_Position = vertex;
}

在您的着色器编译期间,“uv”将被标识为未使用的参数并被删除。即使您将它分配给此着色器中的变量,但从未在片段着色器中使用它,它仍可能被删除,因为它已被识别为对最终片段没有贡献。

关于Webgl 的 getAttribLocation 奇怪地返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008291/

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