WebGL - getAttribLocation:没有对象,Shader问题

时间:2013-02-18 18:39:38

标签: webgl shader

我的WebGl代码存在以下问题。

ERROR:

WebGL: INVALID_VALUE: getAttribLocation: no object or object deleted

我的绘画功能:

function drawScene () {
    vertexPositionAttribute = gl.getAttribLocation(glProgram, "aVertexPosition");
    gl.enableVertexAttribArray(vertexPositionAttribute);

    gl.bindBuffer(gl.ARRAY_BUFFER, trianglesVerticeBuffer);
    gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
    gl.drawArrays(gl.TRIANGLES, 0, 6);
}

我的着色器,已加载,创建并附加到程序中,没有任何问题。我链接并使用了该程序。但仍然找不到我的错误。

顶点:

attribute vec3 aVertexPosition;
void main(void) {
gl_Position = vec4(aVertexPosition, 1.0);
}

片段:

void main(void) {
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

问题是您在initShaders()创建glProgram之前尝试绘制场景。请记住,您是异步下载着色器文件,因此在着色器下载之前,您的drawScene()函数正在运行。

要修复此更改loadFile()函数中的以下行,以便它执行同步请求,如下所示:

request.open('GET', url, false);

Here是指向代码的工作版本的链接。