Reputation: 101
As the title says I have a WebGL application. I am making use of drawArrays in such a fashion
gl.drawArrays(gl.LINES, 0, 44);
But I seem to be running into a problem where if I try to draw more than 44 points than I get the following error
[.WebGL-0x7000c6e700] GL_INVALID_OPERATION: Vertex buffer is not big enough for the draw call
And I have checked to make sure I have enough buffer space even hardcoding the values, it happens on whatever browser I am on.
I think the problem is my laptop (M1 MacBook Pro) as when I move the code to my windows desktop it runs fine.
// edit As for a code example
// 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);
Upvotes: 2
Views: 3812
Reputation: 11
I was having this issue myself, and I realised it was because the count
(drawArrays
third argument) was wrong.
The problem for me was, that the array had single co-ordinates, so every two elements ===
one vec2
for the vertex shader.
That means that the count is not the length of the buffer array, but the length / 2.
You should match the count to how many shapes you will draw - if you're drawing points, then it's buffer.length / 2
. If you're drawing triangles, it will be buffer.length / 6
.
Upvotes: 1
Reputation: 101
I am unsure on the specific details on why this works but turning hardware acceleration off on my browser fixed it for me.
Upvotes: 2