在OpenGL和OpenGL ES(WebGL所基于的)中,分配内存的初始化不需要任何行为,这种"毛刺"效应是未定义行为的结果.
WebGL实际上定义了缓冲区/纹理内存的其他要求,以防止安全漏洞,其中之一是分配的内存始终初始化为0.因此,这种行为是在WebGL的定义,它是这样一种方式,你的"毛刺"的效果是不可能的定义.
WebGL规范 - 版本1.0.2 - 2013年3月
4安全
4.1资源限制
纹理和顶点缓冲区对象(VBO)等WebGL资源必须始终包含初始化数据,即使它们是在没有初始用户数据值的情况下创建的.创建没有初始值的资源通常用于为纹理或VBO保留空间,然后使用texSubImage或bufferSubData调用对其进行修改.如果没有为这些调用提供初始数据,则WebGL实现必须将其内容初始化为0; 必须将深度渲染缓冲区清除为默认的1.0深度.这可能需要创建一个与请求的VBO大小相同的临时缓冲区,以便可以正确初始化它.将数据加载到纹理或VBO中的所有其他形式涉及ArrayBuffers或DOM对象(例如图像),因此已经需要初始化.
当着色器通过诸如drawElements或drawArrays之类的调用访问WebGL资源时,WebGL实现必须确保着色器无法访问超出边界或未初始化的数据.有关必须由WebGL实现强制执行的限制,请参阅启用顶点属性和范围检查.