|
@@ -1,28 +1,39 @@
|
|
|
#include <GL/glew.h>
|
|
|
#include <cassert>
|
|
|
+#include <cstring>
|
|
|
|
|
|
#include "rendering/wrapper/StreamBuffer.h"
|
|
|
|
|
|
-StreamBuffer::StreamBuffer(u64 size) : bufferSize(size), offset(size), index(0), buffer(nullptr) {
|
|
|
+StreamBuffer::StreamBuffer(uint size, uint bytesPerVertex) :
|
|
|
+bufferSize(size), offset(size), bytesPerVertex(bytesPerVertex), index(0), buffer(nullptr) {
|
|
|
}
|
|
|
|
|
|
-void StreamBuffer::reset(u64 size) {
|
|
|
+void StreamBuffer::reset(uint size) {
|
|
|
if(offset + size >= bufferSize) {
|
|
|
offset = 0;
|
|
|
glBufferData(GL_ARRAY_BUFFER, bufferSize, nullptr, GL_STREAM_DRAW);
|
|
|
}
|
|
|
- buffer = static_cast<float*> (glMapBufferRange(GL_ARRAY_BUFFER, offset, size, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT));
|
|
|
+ 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) {
|
|
|
- buffer[index++] = f;
|
|
|
+ memcpy(buffer + index, &f, sizeof (f));
|
|
|
+ index += sizeof (f);
|
|
|
return *this;
|
|
|
}
|
|
|
|
|
|
-void StreamBuffer::draw(uint floatPerVertex) {
|
|
|
+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 / (sizeof (float) * floatPerVertex), index / floatPerVertex);
|
|
|
- offset += index * sizeof(float);
|
|
|
+ glDrawArrays(GL_TRIANGLE_STRIP, offset / bytesPerVertex, index / bytesPerVertex);
|
|
|
+ offset += index;
|
|
|
}
|