MrR*_*ROY 10 html5 opengl-es webgl
这是我的顶点和片段着色器:
    <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>
这是我的着色器初始化器:
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");
}
错误来自这一行:
  gl.enableVertexAttribArray(shaderProgram.textureCoordAttribute);
  >> enablevertexattribarray index out of range
我该如何处理?
Mar*_*ius 23
这只是因为你没有aTextureCoord在你的顶点程序中使用,所以GLSL-Compiler通过删除它来优化它.你真的应该检查gl.GetAttribLocation()的结果是否有错误,并且只启用程序中存在的属性.在缺少属性的情况下发出警告就足够了,我无法区分着色器创作错误和编译器的优化.
| 归档时间: | 
 | 
| 查看次数: | 9156 次 | 
| 最近记录: |