1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include <renderer/opengl/GlVertexBuffer.hpp>
#include <GL/glew.h>
#include <string.h>
#include <stdio.h>
void GlVertexBuffer::Init() {
m_Vertices.reserve(16384);
glGenBuffers(1, &m_Id);
glBindBuffer(GL_ARRAY_BUFFER, m_Id);
}
void GlVertexBuffer::Reset() {
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
m_Vertices.clear();
}
float *GlVertexBuffer::GetData() {
return reinterpret_cast<float*>(m_Vertices.data());
}
uint32_t GlVertexBuffer::GetCount() {
return static_cast<uint32_t>(m_Vertices.size());
}
void GlVertexBuffer::PushRectangle(V3F32 pos, V2F32 dim, V3F32 color) {
V3F32 positions[4] = {
V3F32(pos.x, pos.y, pos.z),
V3F32(pos.x + dim.x, pos.y, pos.z),
V3F32(pos.x + dim.x, pos.y + dim.y, pos.z),
V3F32(pos.x, pos.y + dim.y, pos.z),
};
for (int i = 0; i < 4; i++) {
GlVertex vertex = {};
vertex.pos = positions[i];
vertex.color = color;
m_Vertices.push_back(vertex);
}
}
void GlVertexBuffer::TransferData() {
size_t size = m_Vertices.size() * sizeof(GlVertex);
GLsizei stride = sizeof(GlVertex);
const void *offset_color = (const void*)(3*sizeof(float));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, stride, 0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, stride, offset_color);
glBufferData(GL_ARRAY_BUFFER, size, m_Vertices.data(), GL_STATIC_DRAW);
}
|