feat: opengl buffer & nested uniform buffer class

This commit is contained in:
2025-10-23 22:42:41 +02:00
parent 3574634c4c
commit 337da2b3b7
3 changed files with 103 additions and 0 deletions

View File

@ -7,6 +7,8 @@ set(SOURCES
src/input/input.cpp
src/opengl/buffers.cpp
src/scene/scene.cpp
src/window/window.cpp

View File

@ -0,0 +1,43 @@
#ifndef OPENGL_BUFFERS_H_
#define OPENGL_BUFFERS_H_
#include <GL/glew.h>
#include "engine/export.h"
namespace Core {
namespace OpenGL {
using BufferTarget = GLenum;
using BufferUsage = GLenum;
using BufferID = unsigned int;
class ENGINE_API Buffer {
public:
Buffer(BufferTarget target, BufferUsage usage);
void Data(void* data, size_t size);
void SubData(void *data, size_t size, size_t offset);
void BindBuffer(unsigned int index);
void BindBufferRanged(unsigned int index, size_t offset, size_t size);
protected:
void Bind();
void Unbind();
private:
BufferID m_buffer;
BufferTarget m_target;
BufferUsage m_usage;
};
class ENGINE_API UniformBuffer : public Buffer {
public:
UniformBuffer(size_t size, unsigned int index);
public:
};
} // namespace OpenGL
} // namespace Core
#endif // OPENGL_BUFFERS_H_

View File

@ -0,0 +1,58 @@
#include "engine/opengl/buffers.h"
namespace Core {
namespace OpenGL {
Buffer::Buffer(BufferTarget target, BufferUsage usage)
: m_target(target), m_usage(usage)
{
glGenBuffers(1, &m_buffer);
Bind();
Data(nullptr, 0);
Unbind();
}
void Buffer::Bind() {
glBindBuffer(m_target, m_buffer);
}
void Buffer::Unbind() {
glBindBuffer(m_target, 0);
}
void Buffer::Data(void *data, size_t size) {
Bind();
glBufferData(m_target, size, data, m_usage);
Unbind();
}
void Buffer::SubData(void *data, size_t size, size_t offset) {
Bind();
glBufferSubData(m_target, offset, size, data);
Unbind();
}
void Buffer::BindBuffer(unsigned int index) {
Bind();
glBindBufferBase(m_target, index, m_buffer);
Unbind();
}
void Buffer::BindBufferRanged(unsigned int index, size_t offset, size_t size) {
Bind();
glBindBufferRange(m_target, index, m_buffer, offset, size);
Unbind();
}
UniformBuffer::UniformBuffer(size_t size, unsigned int index)
: Buffer(GL_UNIFORM_BUFFER, GL_STATIC_DRAW)
{
Data(nullptr, size);
BindBuffer(index);
}
} // namespace OpenGL
} // namespace Core