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));
}
鼠標單擊後整個畫布消失。但是,如果我將所有矩形的信息存儲在數組和鼠標處理程序中,則清除畫布,然後從數組中繪製所有矩形,然後就沒有問題了。換句話說,如果我重新渲染完整的場景,那麼就沒有問題了。
所以我的問題是:如果不清除整個畫布並刷新所有內容,是不是可以一個接一個畫?
確實的WebGL/HTML5利用多線程?我想知道如果handleMouseDown運行在UI線程或沒有opengl上下文的東西。也可以嘗試在drawRect之後調用glGetError以查看是否有某些有趣的事情發生。 – Tim 2012-03-23 17:20:08
@Tim,但如果我清除並重新渲染鼠標處理程序中的所有內容,那麼它工作正常。 – taskinoor 2012-03-23 17:22:56
你可以放置代碼drawRect,再加上任何其他代碼,其中包含opengl命令在您的繪圖循環? – Tim 2012-03-23 17:24:46