{"record":{"id":"b686a7624b999d0b","repo":"phaserjs/phaser","slug":"invalid-buffer-type-for-element-array-buffer","errorCode":null,"errorMessage":"Invalid buffer type for ELEMENT_ARRAY_BUFFER","messagePattern":"Invalid buffer type for ELEMENT_ARRAY_BUFFER","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/renderer/webgl/wrappers/WebGLGlobalWrapper.js","lineNumber":246,"sourceCode":"\n    /**\n     * Updates the index array buffer state.\n     *\n     * @method Phaser.Renderer.WebGL.Wrappers.WebGLGlobalWrapper#updateBindingsElementArrayBuffer\n     * @since 4.0.0\n     * @param {Phaser.Types.Renderer.WebGL.WebGLGlobalParameters} state - The state to set.\n     * @param {boolean} [force=false] - If `true`, the state will be set regardless of the current state.\n     */\n    updateBindingsElementArrayBuffer: function (state, force)\n    {\n        var elementArrayBuffer = state.bindings.elementArrayBuffer;\n        var gl = this.renderer.gl;\n        if (\n            elementArrayBuffer !== null &&\n            elementArrayBuffer.bufferType !== gl.ELEMENT_ARRAY_BUFFER\n        )\n        {\n            throw new Error('Invalid buffer type for ELEMENT_ARRAY_BUFFER');\n        }\n\n        var different = elementArrayBuffer !== this.state.bindings.elementArrayBuffer;\n\n        if (different)\n        {\n            this.state.bindings.elementArrayBuffer = elementArrayBuffer;\n        }\n        if (different || force)\n        {\n            var webGLBuffer = elementArrayBuffer ? elementArrayBuffer.webGLBuffer : null;\n            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, webGLBuffer);\n        }\n    },\n\n    /**\n     * Updates the framebuffer state.\n     *","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/phaserjs/phaser/blob/41be1e462bc600064e498cba370bfa8c5c055a22/src/renderer/webgl/wrappers/WebGLGlobalWrapper.js#L228-L264","documentation":"Thrown by WebGLGlobalWrapper.updateBindingsElementArrayBuffer when the buffer bound as ELEMENT_ARRAY_BUFFER has a bufferType other than gl.ELEMENT_ARRAY_BUFFER. It is the index-buffer counterpart of the ARRAY_BUFFER check, preventing a vertex buffer from being bound where indices are expected.","triggerScenarios":"Passing a vertex-typed WebGLBufferWrapper into the elementArrayBuffer slot of a state update; creating a buffer with createVertexBuffer and binding it as an index buffer.","commonSituations":"Custom geometry code that hands a vertex buffer to the element binding; copy-paste errors when wiring up buffer bindings; confusion between createVertexBuffer and createIndexBuffer.","solutions":["Use renderer.createIndexBuffer (bufferType = ELEMENT_ARRAY_BUFFER) for index data.","Check bufferType before binding: if (buf.bufferType === gl.ELEMENT_ARRAY_BUFFER).","Re-audit the geometry setup to ensure vertex and index buffers are created with the correct helpers.","If sharing data, allocate two correctly-typed buffers instead of reusing one."],"exampleFix":"// before\nconst ibo = renderer.createVertexBuffer(indices);\nglWrapper.updateBindingsElementArrayBuffer({ bindings: { elementArrayBuffer: ibo } }); // throws\n\n// after\nconst ibo = renderer.createIndexBuffer(indices);\nglWrapper.updateBindingsElementArrayBuffer({ bindings: { elementArrayBuffer: ibo } });","handlingStrategy":"type-guard","validationCode":"function bindElementBuffer(glWrapper, gl, buf) {\n  if (buf && buf.bufferType !== gl.ELEMENT_ARRAY_BUFFER) {\n    throw new TypeError('Expected ELEMENT_ARRAY_BUFFER-typed wrapper');\n  }\n  glWrapper.updateBindingsElementArrayBuffer({ bindings: { elementArrayBuffer: buf } });\n}","typeGuard":"function isElementArrayBufferWrapper(buf, gl) { return buf == null || buf.bufferType === gl.ELEMENT_ARRAY_BUFFER; }","tryCatchPattern":null,"preventionTips":["Always create index buffers with createIndexBuffer.","Audit custom geometry bindings for swapped vertex/index buffers.","Assert bufferType before binding in debug builds."],"tags":["renderer","webgl","buffer","webgl-wrapper","phaser4"],"backgroundTag":null,"analyzedSha":"41be1e462bc600064e498cba370bfa8c5c055a22","analyzedAt":"2026-08-13T04:23:39.729Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}