#include #include #include #include "rendering/wrapper/StreamBuffer.h" StreamBuffer::StreamBuffer(uint size, uint bytesPerVertex) : bufferSize(size), offset(size), bytesPerVertex(bytesPerVertex), index(0), buffer(nullptr) { } void StreamBuffer::reset(uint size) { if(offset + size >= bufferSize) { offset = 0; glBufferData(GL_ARRAY_BUFFER, bufferSize, nullptr, GL_STREAM_DRAW); } buffer = static_cast (glMapBufferRange(GL_ARRAY_BUFFER, offset, size, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT)); assert(buffer != nullptr); index = 0; } StreamBuffer& StreamBuffer::add(float f) { memcpy(buffer + index, &f, sizeof (f)); index += sizeof (f); return *this; } StreamBuffer& StreamBuffer::addReversed(u32 i) { buffer[index++] = i >> 24; buffer[index++] = i >> 16; buffer[index++] = i >> 8; buffer[index++] = i >> 0; return *this; } void StreamBuffer::draw() { glUnmapBuffer(GL_ARRAY_BUFFER); glDrawArrays(GL_TRIANGLE_STRIP, offset / bytesPerVertex, index / bytesPerVertex); offset += index; }