diff --git a/src/mesh/geometry/Geometry.js b/src/mesh/geometry/Geometry.js index 6124697..e8788be 100644 --- a/src/mesh/geometry/Geometry.js +++ b/src/mesh/geometry/Geometry.js @@ -4,6 +4,7 @@ import getBufferType from '../../core/utils/getBufferType'; const byteSizeMap = { 5126: 4, 5123: 2, 5121: 1 }; +let UID = 0; /* eslint-disable object-shorthand */ const map = { @@ -56,6 +57,8 @@ * @type {Array} */ this.glVertexArrayObjects = []; + + this.id = UID++; } /** @@ -74,6 +77,11 @@ */ addAttribute(id, buffer, size, normalised = false, type, stride, start) { + if(!buffer) + { + buffer = new Float32Array(2); + } + // check if this is a buffer! if (!buffer.data) { diff --git a/src/mesh/geometry/Geometry.js b/src/mesh/geometry/Geometry.js index 6124697..e8788be 100644 --- a/src/mesh/geometry/Geometry.js +++ b/src/mesh/geometry/Geometry.js @@ -4,6 +4,7 @@ import getBufferType from '../../core/utils/getBufferType'; const byteSizeMap = { 5126: 4, 5123: 2, 5121: 1 }; +let UID = 0; /* eslint-disable object-shorthand */ const map = { @@ -56,6 +57,8 @@ * @type {Array} */ this.glVertexArrayObjects = []; + + this.id = UID++; } /** @@ -74,6 +77,11 @@ */ addAttribute(id, buffer, size, normalised = false, type, stride, start) { + if(!buffer) + { + buffer = new Float32Array(2); + } + // check if this is a buffer! if (!buffer.data) { diff --git a/src/mesh/webgl/MeshRenderer.js b/src/mesh/webgl/MeshRenderer.js index d657548..fbc6918 100644 --- a/src/mesh/webgl/MeshRenderer.js +++ b/src/mesh/webgl/MeshRenderer.js @@ -124,6 +124,7 @@ const buffers = geometry.buffers; const attributes = geometry.attributes; + console.log(geometry.attributes) // first update - and create the buffers! for (let i = 0; i < buffers.length; i++) { @@ -165,12 +166,30 @@ for (const j in attributes) { - if (tempStride[attributes[j].buffer] === glShader.attributes[j].size * byteSizeMap[attributes[j].type]) + let attribute = attributes[j]; + let glAttribute = glShader.attributes[j]; + + if(attribute.stride === undefined) { - tempStride[attributes[j].buffer] = 0; + if (tempStride[attribute.buffer] === glAttribute.size * byteSizeMap[attribute.type]) + { + attribute.stride = 0; + } + else + { + attribute.stride = tempStride[attribute.buffer]; + } + } + + if(attribute.start === undefined) + { + attribute.start = tempStart[attribute.buffer]; + + tempStart[attribute.buffer] += glAttribute.size * byteSizeMap[attribute.type]; } } + // next update the attributes buffer.. for (const j in attributes) { @@ -185,14 +204,13 @@ glShader.attributes[j], attribute.type || 5126, // (5126 = FLOAT) attribute.normalized, - tempStride[attribute.buffer], - tempStart[attribute.buffer]); - - tempStart[attribute.buffer] += glShader.attributes[j].size * byteSizeMap[attribute.type]; + attribute.stride, + attribute.start); } geometry.glVertexArrayObjects[this.CONTEXT_UID] = vao; + console.log(vao); return vao; } }