mirror of
https://github.com/allemangD/toddcox-visualize.git
synced 2025-11-10 12:02:47 -05:00
tweak raii shader constructors
This commit is contained in:
@@ -58,6 +58,13 @@ namespace cgl {
|
|||||||
id = glCreateShader(mode);
|
id = glCreateShader(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shader(GLenum mode, const std::string &src) : shader(mode) {
|
||||||
|
set_source(src);
|
||||||
|
|
||||||
|
if (!compile())
|
||||||
|
throw shader_error(get_info_log());
|
||||||
|
}
|
||||||
|
|
||||||
shader(shader &) = delete;
|
shader(shader &) = delete;
|
||||||
|
|
||||||
shader(shader &&o) noexcept {
|
shader(shader &&o) noexcept {
|
||||||
@@ -160,6 +167,17 @@ namespace cgl {
|
|||||||
glProgramParameteri(id, GL_PROGRAM_SEPARABLE, GL_TRUE);
|
glProgramParameteri(id, GL_PROGRAM_SEPARABLE, GL_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shaderprogram(GLenum mode, const std::string &src) : shaderprogram(mode) {
|
||||||
|
shader sh(mode, src);
|
||||||
|
|
||||||
|
attach(sh);
|
||||||
|
|
||||||
|
if (!link())
|
||||||
|
throw shader_error(get_info_log());
|
||||||
|
|
||||||
|
detach(sh);
|
||||||
|
}
|
||||||
|
|
||||||
shaderprogram(shaderprogram &&o) noexcept : program(std::move(o)) {
|
shaderprogram(shaderprogram &&o) noexcept : program(std::move(o)) {
|
||||||
mode = o.mode;
|
mode = o.mode;
|
||||||
}
|
}
|
||||||
@@ -211,6 +229,8 @@ namespace cgl {
|
|||||||
case GL_FRAGMENT_SHADER:
|
case GL_FRAGMENT_SHADER:
|
||||||
bits = GL_FRAGMENT_SHADER_BIT;
|
bits = GL_FRAGMENT_SHADER_BIT;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
throw std::domain_error("invalid shaderprogram mode");
|
||||||
}
|
}
|
||||||
|
|
||||||
glUseProgramStages(id, bits, pgm);
|
glUseProgramStages(id, bits, pgm);
|
||||||
@@ -230,37 +250,11 @@ namespace cgl {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
shader compile_shader(GLenum mode, const std::string &src) {
|
shader compile_shader(GLenum mode, const std::string &file) {
|
||||||
shader res(mode);
|
return shader(mode, utilReadFile(file));
|
||||||
|
|
||||||
res.set_source(src);
|
|
||||||
|
|
||||||
if (!res.compile())
|
|
||||||
throw shader_error(res.get_info_log());
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
shader compile_shader_file(GLenum mode, const std::string &file) {
|
shaderprogram compile_shaderprogram(GLenum mode, const std::string &file) {
|
||||||
return compile_shader(mode, utilReadFile(file));
|
return shaderprogram(mode, utilReadFile(file));
|
||||||
}
|
|
||||||
|
|
||||||
shaderprogram compile_shaderprogram(GLenum mode, const std::string &src) {
|
|
||||||
shader sh = compile_shader(mode, src);
|
|
||||||
|
|
||||||
shaderprogram res(mode);
|
|
||||||
|
|
||||||
res.attach(sh);
|
|
||||||
|
|
||||||
if (!res.link())
|
|
||||||
throw shader_error(res.get_info_log());
|
|
||||||
|
|
||||||
res.detach(sh);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
shaderprogram compile_shaderprogram_file(GLenum mode, const std::string &file) {
|
|
||||||
return compile_shaderprogram(mode, utilReadFile(file));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,21 +81,21 @@ void run(GLFWwindow *window) {
|
|||||||
// glEnable(GL_CULL_FACE);
|
// glEnable(GL_CULL_FACE);
|
||||||
glCullFace(GL_BACK);
|
glCullFace(GL_BACK);
|
||||||
|
|
||||||
auto defer = cgl::compile_shaderprogram_file(
|
auto defer = cgl::compile_shaderprogram(
|
||||||
GL_VERTEX_SHADER, "shaders/slice/deferred.vs.glsl");
|
GL_VERTEX_SHADER, "shaders/slice/deferred.vs.glsl");
|
||||||
auto direct_ortho = cgl::compile_shaderprogram_file(
|
auto direct_ortho = cgl::compile_shaderprogram(
|
||||||
GL_VERTEX_SHADER, "shaders/direct-ortho.vs.glsl");
|
GL_VERTEX_SHADER, "shaders/direct-ortho.vs.glsl");
|
||||||
auto direct_stereo = cgl::compile_shaderprogram_file(
|
auto direct_stereo = cgl::compile_shaderprogram(
|
||||||
GL_VERTEX_SHADER, "shaders/direct-stereo.vs.glsl");
|
GL_VERTEX_SHADER, "shaders/direct-stereo.vs.glsl");
|
||||||
|
|
||||||
auto slice = cgl::compile_shaderprogram_file(
|
auto slice = cgl::compile_shaderprogram(
|
||||||
GL_GEOMETRY_SHADER, "shaders/slice/slice.gm.glsl");
|
GL_GEOMETRY_SHADER, "shaders/slice/slice.gm.glsl");
|
||||||
auto curve_stereo = cgl::compile_shaderprogram_file(
|
auto curve_stereo = cgl::compile_shaderprogram(
|
||||||
GL_GEOMETRY_SHADER, "shaders/curve-stereo.gm.glsl");
|
GL_GEOMETRY_SHADER, "shaders/curve-stereo.gm.glsl");
|
||||||
auto curve_ortho = cgl::compile_shaderprogram_file(
|
auto curve_ortho = cgl::compile_shaderprogram(
|
||||||
GL_GEOMETRY_SHADER, "shaders/curve-ortho.gm.glsl");
|
GL_GEOMETRY_SHADER, "shaders/curve-ortho.gm.glsl");
|
||||||
|
|
||||||
auto solid = cgl::compile_shaderprogram_file(
|
auto solid = cgl::compile_shaderprogram(
|
||||||
GL_FRAGMENT_SHADER, "shaders/solid.fs.glsl");
|
GL_FRAGMENT_SHADER, "shaders/solid.fs.glsl");
|
||||||
|
|
||||||
cgl::pipeline proj_pipe;
|
cgl::pipeline proj_pipe;
|
||||||
|
|||||||
Reference in New Issue
Block a user