diff --git a/vis/include/cgl/render.hpp b/vis/include/cgl/render.hpp index 83bb971..fe8b56c 100644 --- a/vis/include/cgl/render.hpp +++ b/vis/include/cgl/render.hpp @@ -206,30 +206,6 @@ namespace cgl { return id; } - void use_stages(const shaderprogram &pgm) { - glUseProgramStages(id, GL_VERTEX_SHADER_BIT, pgm); - } - - void use_stages(const shaderprogram &pgm) { - glUseProgramStages(id, GL_TESS_CONTROL_SHADER_BIT, pgm); - } - - void use_stages(const shaderprogram &pgm) { - glUseProgramStages(id, GL_TESS_EVALUATION_SHADER_BIT, pgm); - } - - void use_stages(const shaderprogram &pgm) { - glUseProgramStages(id, GL_GEOMETRY_SHADER_BIT, pgm); - } - - void use_stages(const shaderprogram &pgm) { - glUseProgramStages(id, GL_FRAGMENT_SHADER_BIT, pgm); - } - - void use_stages(const shaderprogram &pgm) { - glUseProgramStages(id, GL_COMPUTE_SHADER_BIT, pgm); - } - [[nodiscard]] int get(GLenum pname) const { GLint res; glGetProgramPipelineiv(id, pname, &res); @@ -242,6 +218,36 @@ namespace cgl { glGetProgramPipelineInfoLog(id, len, nullptr, buffer); return std::string(buffer); } + + pipeline &stage(const shaderprogram &pgm) { + glUseProgramStages(id, GL_VERTEX_SHADER_BIT, pgm); + return *this; + } + + pipeline &stage(const shaderprogram &pgm) { + glUseProgramStages(id, GL_TESS_CONTROL_SHADER_BIT, pgm); + return *this; + } + + pipeline &stage(const shaderprogram &pgm) { + glUseProgramStages(id, GL_TESS_EVALUATION_SHADER_BIT, pgm); + return *this; + } + + pipeline &stage(const shaderprogram &pgm) { + glUseProgramStages(id, GL_GEOMETRY_SHADER_BIT, pgm); + return *this; + } + + pipeline &stage(const shaderprogram &pgm) { + glUseProgramStages(id, GL_FRAGMENT_SHADER_BIT, pgm); + return *this; + } + + pipeline &stage(const shaderprogram &pgm) { + glUseProgramStages(id, GL_COMPUTE_SHADER_BIT, pgm); + return *this; + } }; namespace pgm { diff --git a/vis/include/geometry.hpp b/vis/include/geometry.hpp index a7f801b..c03031a 100644 --- a/vis/include/geometry.hpp +++ b/vis/include/geometry.hpp @@ -8,7 +8,7 @@ #include "combo_iterator.hpp" /** - * An primitive with N indices. + * An primitive stage N indices. * @tparam N */ template diff --git a/vis/src/main.cpp b/vis/src/main.cpp index 8bdf1fa..27c5aa6 100644 --- a/vis/src/main.cpp +++ b/vis/src/main.cpp @@ -91,10 +91,11 @@ void run(GLFWwindow *window) { auto solid = cgl::pgm::frag::file("shaders/solid.fs.glsl"); - cgl::pipeline proj_pipe; - proj_pipe.use_stages(direct_stereo); - proj_pipe.use_stages(curve_stereo); - proj_pipe.use_stages(solid); + auto proj_pipe = cgl::pipeline(); + proj_pipe + .stage(direct_stereo) + .stage(curve_stereo) + .stage(solid); //region points auto group = tc::group::H(4);