2013-02-18 140 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