12
이 코드의 문제를 분리하는 데 성공했다 :WebGL을의 getAttribLocation는 이상한 -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는, 무사는 0입니다 그러나 textureLocation가 -1, 내가 무엇을 놓치고를?
여기에 "이 쉐이더에서 다양하게 지정했는데 프래그먼트 쉐이더에서 사용하지 않아도 여전히 껍질을 벗겨 낼 수 있습니다"라는 말은 결국 나를 도왔습니다. 사용되지 않는 속성은 제거 될 것이라는 것을 알았지 만, 그것이 정점 셰이더와 조각 셰이더 사이를 옮길 수 있다는 것을 알지 못했습니다. 감사! – aclave1