2013-02-18 210 views
1

我的WebGl代码有以下问题。WebGL - getAttribLocation:无对象,着色器问题

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); 
} 

感谢您的帮助

+0

你可以做一个jsFiddle吗?没有剩下的代码就很难知道。 – 2013-02-18 19:05:06

+0

http://jsfiddle.net/Kf8ZD/ 着色器丢失。你发现那里的其他地方 – Pris0n 2013-02-18 19:35:49

回答

1

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

要解决这一变化的下面一行在你loadFile()功能,使其瓶坯像这样一个同步请求:

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

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

+0

太棒了。谢谢,它现在工作正常:-) – Pris0n 2013-02-19 09:43:41

+0

谁曾经投下我的答案,是否有原因? – Anton 2013-02-19 18:31:43