Tôi đã cố gắng cô lập các vấn đề trong mã này:WebGL của kỳ quặc trả về -1
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 là alright, nó là 0. Nhưng textureLocation là -1, những gì tôi bị mất?
Điểm này ở đây: "Ngay cả khi bạn gán cho nó thay đổi trong trình đổ bóng này nhưng không bao giờ sử dụng nó trong trình đổ bóng đoạn, nó vẫn có thể bị loại bỏ" là điều giúp tôi cuối cùng. Tôi biết rằng các thuộc tính không được sử dụng sẽ bị tước đi, nhưng tôi không biết rằng nó có thể tiếp tục giữa các đỉnh và các phần đổ bóng. Cảm ơn! – aclave1