void GraphicsLayer::updateArray(VertexArray& array, const QVector<Vertex>& data) { int length = data.count(); if (array.length() != length) { removeArray(array); array.start = -1; for (int i = 0; i < m_free_regions.count(); ++i) { VertexArray& free_region = m_free_regions[i]; if (free_region.length() == length) { array.start = free_region.start; array.end = array.start + length; m_free_regions.removeAt(i); break; } else if (free_region.length() > length) { array.start = free_region.start; array.end = array.start + length; free_region.start += length; break; } } } if (array.start != -1) { qCopy(data.begin(), data.end(), m_data.begin() + array.start); if (!m_changed) { m_changed_regions.append(array); } } else { array.start = m_data.count(); array.end = array.start + length; m_data += data; m_changed = true; m_changed_regions.clear(); } }
void GraphicsLayer13::draw(const VertexArray& array, GLenum mode) { glClientActiveTexture(GL_TEXTURE1); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &at(array.start).s2); glClientActiveTexture(GL_TEXTURE0); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &at(array.start).s); glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &at(array.start).x); glDrawArrays(mode, 0, array.length()); }
void GraphicsLayer15::draw(const VertexArray& array, GLenum mode) { glDrawArrays(mode, array.start, array.length()); }
void GraphicsLayer11::draw(const VertexArray& array, GLenum mode) { glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &at(array.start).s); glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &at(array.start).x); glDrawArrays(mode, 0, array.length()); }