feat: opengl buffer & nested uniform buffer class
This commit is contained in:
@ -7,6 +7,8 @@ set(SOURCES
|
|||||||
|
|
||||||
src/input/input.cpp
|
src/input/input.cpp
|
||||||
|
|
||||||
|
src/opengl/buffers.cpp
|
||||||
|
|
||||||
src/scene/scene.cpp
|
src/scene/scene.cpp
|
||||||
src/window/window.cpp
|
src/window/window.cpp
|
||||||
|
|
||||||
|
|||||||
43
engine/include/engine/opengl/buffers.h
Normal file
43
engine/include/engine/opengl/buffers.h
Normal 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_
|
||||||
58
engine/src/opengl/buffers.cpp
Normal file
58
engine/src/opengl/buffers.cpp
Normal 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
|
||||||
Reference in New Issue
Block a user