2012-03-23 75 views
0

我有一個幫助方法drawRect(p1, p2),它繪製了一個矩形(在正交投影中)。代碼工作正常,如果我這樣做:單擊鼠標後WebGL繪製失敗

function webGLStart() { 
    // initialization code 

    gl.clear(gl.COLOR_BUFFER_BIT); 
    gl.uniformMatrix4fv(shaderProgram.pMatrixLoc, false, pMatrix); 

    drawRect(new Point(10, 10), new Point(50, 50)); 
} 

現在假設我想在每次單擊鼠標後呈現一個新的矩形。所以我清除了畫布,設置了投影矩陣,並在鼠標下移處理程序中調用了drawRect調用。它不工作。

function webGLStart() { 
    // initialization code 

    gl.clear(gl.COLOR_BUFFER_BIT); 
    gl.uniformMatrix4fv(shaderProgram.pMatrixLoc, false, pMatrix); 

    canvas.onmousedown = handleMouseDown; 
} 

function handleMouseDown(event) { 
    // x, y depends on click coordinate 
    drawRect(new Point(x, y), new Point(x + 20, y + 20)); 
} 

鼠標單擊後整個畫布消失。但是,如果我將所有矩形的信息存儲在數組和鼠標處理程序中,則清除畫布,然後從數組中繪製所有矩形,然後就沒有問題了。換句話說,如果我重新渲染完整的場景,那麼就沒有問題了。

所以我的問題是:如果不清除整個畫布並刷新所有內容,是不是可以一個接一個畫?

+0

確實的WebGL/HTML5利用多線程?我想知道如果handleMouseDown運行在UI線程或沒有opengl上下文的東西。也可以嘗試在drawRect之後調用glGetError以查看是否有某些有趣的事情發生。 – Tim 2012-03-23 17:20:08

+0

@Tim,但如果我清除並重新渲染鼠標處理程序中的所有內容,那麼它工作正常。 – taskinoor 2012-03-23 17:22:56

+0

你可以放置代碼drawRect,再加上任何其他代碼,其中包含opengl命令在您的繪圖循環? – Tim 2012-03-23 17:24:46

回答