StreamBuffer.cpp 767 B

123456789101112131415161718192021222324
  1. #include <GL/glew.h>
  2. #include <cassert>
  3. #include "rendering/wrapper/StreamBuffer.h"
  4. StreamBuffer::StreamBuffer(int size, int bytesPerVertex) :
  5. bufferSize(size), offset(size), bytesPerVertex(bytesPerVertex), index(0), buffer(nullptr) {
  6. }
  7. void StreamBuffer::reset(int size) {
  8. if(offset + size >= bufferSize) {
  9. offset = 0;
  10. glBufferData(GL_ARRAY_BUFFER, bufferSize, nullptr, GL_STREAM_DRAW);
  11. }
  12. buffer = static_cast<char*> (glMapBufferRange(GL_ARRAY_BUFFER, offset, size, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT));
  13. assert(buffer != nullptr);
  14. index = 0;
  15. }
  16. void StreamBuffer::draw() {
  17. glUnmapBuffer(GL_ARRAY_BUFFER);
  18. glDrawArrays(GL_TRIANGLE_STRIP, offset / bytesPerVertex, index / bytesPerVertex);
  19. offset += index;
  20. }