代码之家  ›  专栏  ›  技术社区  ›  shabunc

WebGL上下文完全被重新绘制,没有明显的原因

  •  1
  • shabunc  · 技术社区  · 7 年前

    let points = rectangle(20, 20, 100, 100)
    gl.bufferData(WebGLRenderingContext.ARRAY_BUFFER, convertFloat32(points), WebGLRenderingContext.STATIC_DRAW)
    gl.drawArrays(WebGLRenderingContext.LINE_STRIP, 0, points.length)
    

    这很有效。我看到一个长方形画了一个更令人高兴的。我想画多少矩形就画多少矩形,这一点也是一样的。

    但是,每当我尝试添加类似的内容时:

    window.setTimeout(function() {
        let points = rectangle(120, 120, 100, 100)
        gl.bufferData(WebGLRenderingContext.ARRAY_BUFFER, convertFloat32(points), WebGLRenderingContext.STATIC_DRAW)
        gl.drawArrays(WebGLRenderingContext.LINE_STRIP, 0, points.length)
    }, 1000);
    

    我的问题是——我到底错过了什么?

    UPD:我已经分叉了一些现有的示例,并对其进行了修改,使其具有(某种)我所说的最小示例- https://codepen.io/shabunc/pen/YRgzJq?editors=1010

    1 回复  |  直到 7 年前
        1
  •  2
  •   deblocker    7 年前

    还有第二个参数-一些可选参数-用于 getCcontext() 方法。

    var canvas = document.getElementById("c");
    
    var NO_ANTIALIAS = false, 
        CLEAR_DRAWING_BUFFER = false,
        attributes = {antialias: !NO_ANTIALIAS, preserveDrawingBuffer: !CLEAR_DRAWING_BUFFER};
    
    var gl = canvas.getContext("webgl", attributes);
    

    说明:

    • :这只是对浏览器的提示-如果可用,请尝试 平滑绘制边框的步骤
    • :您需要注意清除图形

    以下是参考资料: WebGL Specification - Context creation