#include #include #include #include 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(m_Vertices.data()); } uint32_t GlVertexBuffer::GetCount() { return static_cast(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); }