0
這是一個從webglfundamentals.com非常輕微改寫的介紹性示例。webGL在事件處理程序中的繪製似乎清除畫布
http://codepen.io/anon/pen/mVYrZd
MOUSEDOWN在畫布上繪製一個新的矩形。先前繪製的矩形被清除。爲什麼? for循環和事件處理函數調用完全相同的函數。
相關代碼:
// Draw 50 random rectangles in random colors.
// They draw on top of each other, as expected.
for (var i = 0; i < 50; i += 1) {
drawARandomRectangle(gl);
}
// Draw one rectangle on the canvas in response to a canvas mousedown.
// The buffer seems to be cleared, only a single new rectangle shows.
canvas.addEventListener("mousedown", function(e){
drawARandomRectangle(gl);
});
我已經想通了,初始化與preserveDrawingBuffer
情況下會導致鼠標按下矩形現有矩形的頂部可以得出:
var gl = canvas.getContext("webgl", {
preserveDrawingBuffer: true
});
但我也請注意0的性能很差,並且它不能很好地解釋爲什麼內循環調用和mousedown調用呈現不同。
差是相對的。它可能不會超過10%,通常不會變慢。在任何支持使用抗鋸齒功能(默認設置)上進行抗鋸齒的計算機上,速度沒有差別,因爲抗鋸齒需要「有效」複製的「解決」步驟。只有在某些手機上可能會變慢,然後如果實際需要保持內容的話,速度不會變慢。 – gman