Skip to content

File UniformBuffer.h

File List > buffers > UniformBuffer.h

Go to the documentation of this file

#pragma once

#include "Buffers.h"
#include <GLFW/glfw3.h>

class UniformBuffer : public Buffers
{
    GLuint ubo_bind{ 0 }; 

public:

    UniformBuffer() = default;

    UniformBuffer(GLuint _bind);

    template<class _S>
    UniformBuffer(GLuint _bind, _S _tar);

    ~UniformBuffer() = default;

    UniformBuffer(const UniformBuffer& ubo);

    UniformBuffer(UniformBuffer&& ubo) noexcept;

    UniformBuffer& operator=(const UniformBuffer& ubo);

    UniformBuffer& operator=(UniformBuffer&& ubo) noexcept;

public:

    void Bind(GLuint _bind = static_cast<GLuint>(-1)) const;

    void Unbind() const;

public:

    template<class _S>
    void Update(_S _tar);

};


template<class _S>
void UniformBuffer::Update(_S _tar)
{
    buf_size = static_cast<GLuint>(sizeof(_S));
    glBindBuffer(GL_UNIFORM_BUFFER, buf_ID);
    glBufferData(GL_UNIFORM_BUFFER, buf_size, &_tar, GL_DYNAMIC_DRAW);
}

template<class _S>
UniformBuffer::UniformBuffer(GLuint _bind, _S _tar)
    : UniformBuffer(_bind)
{
    buf_size = static_cast<GLuint>(sizeof(_S));
    glBufferData(GL_UNIFORM_BUFFER, buf_size, &_tar, GL_DYNAMIC_DRAW);
}