123456789101112131415161718192021222324252627282930313233343536373839 |
- #include <GL/glew.h>
- #include <cassert>
- #include <cstring>
- #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<u8*> (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;
- }
|