#include #include #include "client/rendering/wrapper/StreamBuffer.h" StreamBuffer::StreamBuffer(u64 size) : bufferSize(size), offset(size), index(0), buffer(nullptr) { } void StreamBuffer::reset(u64 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) { buffer[index++] = f; return *this; } void StreamBuffer::draw(uint floatPerVertex) { glUnmapBuffer(GL_ARRAY_BUFFER); glDrawArrays(GL_TRIANGLE_STRIP, offset / (sizeof (float) * floatPerVertex), index / floatPerVertex); offset += index * sizeof(float); }