-
Notifications
You must be signed in to change notification settings - Fork 328
Open
Description
On line 97 in the code the "dtype" variable is used, which is always undefined on that else branch, as it was declared on line 79 and never initialized. I would guess maybe it was meant to be "type" function argument instead.
Lines 79 to 97 in 63cd83c
| var dtype | |
| if (data) { | |
| var predictedType = type | |
| if (!type && ( | |
| !isTypedArray(data) || | |
| (isNDArrayLike(data) && !isTypedArray(data.data)))) { | |
| predictedType = extensions.oes_element_index_uint | |
| ? GL_UNSIGNED_INT | |
| : GL_UNSIGNED_SHORT | |
| } | |
| bufferState._initBuffer( | |
| elements.buffer, | |
| data, | |
| usage, | |
| predictedType, | |
| 3) | |
| } else { | |
| gl.bufferData(GL_ELEMENT_ARRAY_BUFFER, byteLength, usage) | |
| elements.buffer.dtype = dtype || GL_UNSIGNED_BYTE |
In other words the fix would be to do:
elements.buffer.dtype = type || GL_UNSIGNED_BYTEon line 97, but I'm not sure.
This breaks the code if you init elements buffer with no data and the buffer type is uint16 or uint32. Because later subdata calls might allocate a wrong typed buffer from the pool and such.
P.S. TypeScript is the way to catch bugs like these, but I guess it's too late for regl. 😞
Metadata
Metadata
Assignees
Labels
No labels