GL/Program: Make moveable
This commit is contained in:
parent
7f5c6f8b4f
commit
256cb8a82c
|
@ -13,6 +13,17 @@ static GLuint s_next_bad_shader_id = 1;
|
||||||
|
|
||||||
Program::Program() = default;
|
Program::Program() = default;
|
||||||
|
|
||||||
|
Program::Program(Program&& prog)
|
||||||
|
{
|
||||||
|
m_program_id = prog.m_program_id;
|
||||||
|
prog.m_program_id = 0;
|
||||||
|
m_vertex_shader_id = prog.m_vertex_shader_id;
|
||||||
|
prog.m_vertex_shader_id = 0;
|
||||||
|
m_fragment_shader_id = prog.m_fragment_shader_id;
|
||||||
|
prog.m_fragment_shader_id = 0;
|
||||||
|
m_uniform_locations = std::move(prog.m_uniform_locations);
|
||||||
|
}
|
||||||
|
|
||||||
Program::~Program()
|
Program::~Program()
|
||||||
{
|
{
|
||||||
Destroy();
|
Destroy();
|
||||||
|
@ -174,6 +185,8 @@ void Program::Destroy()
|
||||||
glDeleteProgram(m_program_id);
|
glDeleteProgram(m_program_id);
|
||||||
m_program_id = 0;
|
m_program_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_uniform_locations.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::RegisterUniform(const char* name)
|
int Program::RegisterUniform(const char* name)
|
||||||
|
@ -505,4 +518,17 @@ void Program::BindUniformBlock(const char* name, u32 index)
|
||||||
glUniformBlockBinding(m_program_id, location, index);
|
glUniformBlockBinding(m_program_id, location, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Program& Program::operator=(Program&& prog)
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
m_program_id = prog.m_program_id;
|
||||||
|
prog.m_program_id = 0;
|
||||||
|
m_vertex_shader_id = prog.m_vertex_shader_id;
|
||||||
|
prog.m_vertex_shader_id = 0;
|
||||||
|
m_fragment_shader_id = prog.m_fragment_shader_id;
|
||||||
|
prog.m_fragment_shader_id = 0;
|
||||||
|
m_uniform_locations = std::move(prog.m_uniform_locations);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace GL
|
} // namespace GL
|
|
@ -9,6 +9,8 @@ class Program
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Program();
|
Program();
|
||||||
|
Program(const Program&) = delete;
|
||||||
|
Program(Program&& prog);
|
||||||
~Program();
|
~Program();
|
||||||
|
|
||||||
static GLuint CompileShader(GLenum type, const std::string_view source);
|
static GLuint CompileShader(GLenum type, const std::string_view source);
|
||||||
|
@ -78,6 +80,9 @@ public:
|
||||||
|
|
||||||
void BindUniformBlock(const char* name, u32 index);
|
void BindUniformBlock(const char* name, u32 index);
|
||||||
|
|
||||||
|
Program& operator=(const Program&) = delete;
|
||||||
|
Program& operator=(Program&& prog);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static u32 s_last_program_id;
|
static u32 s_last_program_id;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue