正如标题所示,我有一个 WebGL 应用程序。我正在以这种方式使用drawArrays
gl.drawArrays(gl.LINES, 0, 44);
但我似乎遇到了一个问题,如果我尝试绘制超过 44 个点,则会出现以下错误
[.WebGL-0x7000c6e700] GL_INVALID_OPERATION: Vertex buffer is not big enough for the draw call
我已经检查以确保我有足够的缓冲区空间,甚至对值进行硬编码,它发生在我使用的任何浏览器上。
我认为问题出在我的笔记本电脑(M1 MacBook Pro)上,因为当我将代码移至 Windows 桌面时,它运行良好。
//编辑 至于代码示例
// points is an array of 46 points i.e. [[0,0,1,1],....]
let wBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, wBuffer);
gl.bufferData(gl.ARRAY_BUFFER, flatten(points), gl.STATIC_DRAW);
let vPosition = gl.getAttribLocation(program, "vPosition");
gl.vertexAttribPointer(vPosition, 4, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(vPosition);
gl.drawArrays(gl.LINES, 0, 46);
最佳答案
我不确定其工作原理的具体细节,但关闭浏览器上的硬件加速为我解决了这个问题。
关于javascript - 即使有足够的缓冲区空间,WebGL 也无法绘制超过 44 个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71846106/