tutorial supports descargar html5 opengl-es webgl

html5 - supports - WebGL: índice enablevertexattribarray fuera de rango



webgl supports (1)

Aquí mi vértice y sombreadores de fragmentos:

<script id="shader-fs" type="x-shader/x-fragment"> precision mediump float; uniform sampler2D uSampler; varying vec4 vColor; varying vec2 vTextureCoord; void main(void) { gl_FragColor = vColor; // gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); } </script> <script id="shader-vs" type="x-shader/x-vertex"> attribute vec3 aVertexPosition; attribute vec4 aVertexColor; attribute vec2 aTextureCoord; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec4 vColor; varying vec2 vTextureCoord; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vColor = aVertexColor; // vTextureCoord = aTextureCoord; } </script>

Y aquí está mi inicializador de sombreador:

function initShaders() { var fragmentShader = getShader(gl, "shader-fs"); var vertexShader = getShader(gl, "shader-vs"); shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, vertexShader); gl.attachShader(shaderProgram, fragmentShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { alert("Could not initialise shaders"); } gl.useProgram(shaderProgram); shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition"); gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute); shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, "aVertexColor"); gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute); shaderProgram.textureCoordAttribute = gl.getAttribLocation(shaderProgram, "aTextureCoord"); gl.enableVertexAttribArray(shaderProgram.textureCoordAttribute); shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix"); shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix"); shaderProgram.samplerUniform = gl.getUniformLocation(shaderProgram, "uSampler"); }

El error proviene de esta línea:

gl.enableVertexAttribArray(shaderProgram.textureCoordAttribute); >> enablevertexattribarray index out of range

¿Cómo lo manejo?


Eso es simplemente porque no usas aTextureCoord en tu programa vertex, por lo que el compilador GLSL lo optimiza al eliminarlo. Debería verificar el resultado de gl.GetAttribLocation () para ver si hay errores y habilitar solo los atributos que están presentes en su programa. Emitir una advertencia en caso de que falte un atributo sería suficiente, no conozco ninguna manera de distinguir los errores de autoría del sombreador de las optimizaciones hechas por el compilador.