private void setVCount(int vc) { vcount = vc; buffer.limit(vcount * layout.getBytesize()); }
public VertexBuffer(DataLayout layout, int size) { this.size = size; this.layout = layout; buffer = GLBuffers.newDirectByteBuffer(size * layout.getBytesize()); buffer.limit(0); }
public int getVertexCount() { return buffer.getSize() / layout.getBytesize(); } }
public VertexBuffer(DataLayout layout, float... data) { this(layout, data.length / (layout.getBytesize() / 4)); for (Element e : layout.getElements()) { if (e.getDataType() != DataType.FLOAT) { throw new IllegalArgumentException("The layout must consist of only float tpye data elements!"); } } if (data.length % (layout.getBytesize() / 4) != 0) { throw new IllegalArgumentException("The data size is not an excate multiple of the data layout size!"); } setVCount(size); buffer.asFloatBuffer().put(data); }
public void copyInto(int offset, VertexBuffer vbuffer) { assert (size >= vbuffer.vcount + offset) : "Destination Buffer not large enough"; assert (offset <= vcount) : "Offset:" + offset + " vcount:" + vcount + " (offset>vcount)"; setVCount(vbuffer.vcount + offset); if (!vbuffer.layout.equals(layout)) { setVCount(max(vcount, vbuffer.vcount + offset)); for (int i = 0; i < vbuffer.vcount; ++i) { copyVertex(i, offset, vbuffer); } } else { buffer.position(layout.getBytesize() * offset); ByteBuffer buf = vbuffer.buffer; buf.position(0); buffer.put(buf); } }
public void copyVertex(int id, int offset, VertexBuffer vbuffer) { assert (id + offset < vcount) : "The destination vertex is not in bound of the destination buffer"; if (layout.equals(vbuffer.layout)) { ByteBuffer buf = vbuffer.buffer; int limit = offset + layout.getBytesize(); assert !(limit <= buf.capacity() || id > vcount) : "Couldn't copy Vertex"; buf.position(offset); buf.limit(limit); buffer.position(layout.getBytesize() * id); buffer.put(buf); } else { Vertex src = vbuffer.getVertex(id); Vertex dst = getVertex(id + offset); for (Element e : layout.getElements()) { if (vbuffer.layout.hasElement(e)) { dst.setAttribute(e, src.getAttribute(e)); } } } }