add uniform buffer functions in shader.cpp
parent
febfe200a9
commit
f94ecb2e1e
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
|
@ -0,0 +1 @@
|
||||||
|
BLT_WITH_GRAPHICS
|
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/BLT-With-Graphics-Template.iml" filepath="$PROJECT_DIR$/.idea/BLT-With-Graphics-Template.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$/libraries/BLT" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$/libraries/BLT/libraries/parallel-hashmap" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$/libraries/imgui" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -30,11 +30,12 @@ namespace blt::gfx
|
||||||
class uniform_buffer
|
class uniform_buffer
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
GLuint uboID;
|
GLuint uboID = 0;
|
||||||
size_t size_;
|
size_t size_;
|
||||||
GLuint location_;
|
GLuint location_;
|
||||||
public:
|
public:
|
||||||
explicit uniform_buffer(size_t size, GLuint location = 0);
|
explicit uniform_buffer(size_t size, GLuint location = 0);
|
||||||
|
|
||||||
uniform_buffer(void* data, size_t size, GLuint location = 0);
|
uniform_buffer(void* data, size_t size, GLuint location = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,14 +43,19 @@ namespace blt::gfx
|
||||||
* @param newSize new size for the UBO
|
* @param newSize new size for the UBO
|
||||||
*/
|
*/
|
||||||
uniform_buffer& resize(size_t newSize);
|
uniform_buffer& resize(size_t newSize);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Uploads data to the UBO. This can be an arbitrary locations and does not need to be the whole UBO.
|
* Uploads data to the UBO. This can be an arbitrary locations and does not need to be the whole UBO.
|
||||||
*/
|
*/
|
||||||
uniform_buffer& upload(void* data, size_t size, size_t offset = 0);
|
uniform_buffer& upload(void* data, size_t size, size_t offset = 0);
|
||||||
/**
|
|
||||||
* Binds the UBO to a binding location
|
uniform_buffer& bind();
|
||||||
*/
|
|
||||||
uniform_buffer& bind(GLuint location);
|
inline uniform_buffer& unbind()
|
||||||
|
{
|
||||||
|
glBindBuffer(GL_UNIFORM_BUFFER, 0);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
~uniform_buffer();
|
~uniform_buffer();
|
||||||
|
|
||||||
|
@ -85,14 +91,22 @@ namespace blt::gfx
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
inline void bind() const
|
inline const shader_base_t& bind() const
|
||||||
{
|
{
|
||||||
glUseProgram(programID);
|
glUseProgram(programID);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void setBool(const std::string& name, bool value)
|
inline shader_base_t& unbind()
|
||||||
|
{
|
||||||
|
glUseProgram(0);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline shader_base_t& setBool(const std::string& name, bool value)
|
||||||
{
|
{
|
||||||
glUniform1i(getUniformLocation(name), (int) value);
|
glUniform1i(getUniformLocation(name), (int) value);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void setInt(const std::string& name, int value)
|
inline void setInt(const std::string& name, int value)
|
||||||
|
|
|
@ -160,33 +160,51 @@ namespace blt::gfx
|
||||||
move.programID = -1;
|
move.programID = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uniform_buffer::uniform_buffer(size_t size, GLuint location)
|
uniform_buffer::uniform_buffer(size_t size, GLuint location): size_(size), location_(location)
|
||||||
{
|
{
|
||||||
|
glGenBuffers(1, &uboID);
|
||||||
|
bind();
|
||||||
|
glBufferData(GL_UNIFORM_BUFFER, static_cast<GLsizeiptr>(size), nullptr, GL_DYNAMIC_READ);
|
||||||
|
unbind();
|
||||||
|
|
||||||
|
glBindBufferBase(GL_UNIFORM_BUFFER, location, uboID);
|
||||||
}
|
}
|
||||||
|
|
||||||
uniform_buffer::uniform_buffer(void* data, size_t size, GLuint location)
|
uniform_buffer::uniform_buffer(void* data, size_t size, GLuint location): size_(size), location_(location)
|
||||||
{
|
{
|
||||||
|
glGenBuffers(1, &uboID);
|
||||||
|
bind();
|
||||||
|
glBufferData(GL_UNIFORM_BUFFER, static_cast<GLsizeiptr>(size), data, GL_DYNAMIC_READ);
|
||||||
|
unbind();
|
||||||
|
|
||||||
|
glBindBufferBase(GL_UNIFORM_BUFFER, location, uboID);
|
||||||
}
|
}
|
||||||
|
|
||||||
uniform_buffer& uniform_buffer::resize(size_t newSize)
|
uniform_buffer& uniform_buffer::resize(size_t newSize)
|
||||||
{
|
{
|
||||||
|
bind();
|
||||||
|
size_ = newSize;
|
||||||
|
glBufferData(GL_UNIFORM_BUFFER, static_cast<GLsizeiptr>(size_), nullptr, GL_DYNAMIC_READ);
|
||||||
|
unbind();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
uniform_buffer& uniform_buffer::upload(void* data, size_t size, size_t offset)
|
uniform_buffer& uniform_buffer::upload(void* data, size_t size, size_t offset)
|
||||||
{
|
{
|
||||||
|
bind();
|
||||||
|
glBufferSubData(GL_UNIFORM_BUFFER, static_cast<GLsizeiptr>(offset), static_cast<GLsizeiptr>(size), data);
|
||||||
|
unbind();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
uniform_buffer& uniform_buffer::bind(GLuint location)
|
uniform_buffer& uniform_buffer::bind()
|
||||||
{
|
{
|
||||||
|
glBindBuffer(GL_UNIFORM_BUFFER, uboID);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
uniform_buffer::~uniform_buffer()
|
uniform_buffer::~uniform_buffer()
|
||||||
{
|
{
|
||||||
|
glDeleteBuffers(1, &uboID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue