11#ifndef CSCI441_SHADER_PROGRAM_PIPELINE_HPP 
   12#define CSCI441_SHADER_PROGRAM_PIPELINE_HPP 
   32        [[maybe_unused]] 
static void enableDebugMessages();
 
   37        [[maybe_unused]] 
static void disableDebugMessages();
 
   75        [[maybe_unused]] 
void useProgramStages( GLbitfield programStages, const 
ShaderProgram *shaderProgram ) const;
 
   82        [[maybe_unused]] 
void useProgramStages( const 
ShaderProgram *shaderProgram ) const;
 
   88        [[maybe_unused]] 
void bindPipeline() const;
 
   93        [[maybe_unused]] 
void printPipelineInfo() const;
 
   99        [[maybe_unused]] [[nodiscard]] 
bool validatePipeline() const;
 
  104        GLuint _pipelineHandle;
 
  123    glGenProgramPipelines(1,& _pipelineHandle);
 
  127    glDeleteProgramPipelines(1, &_pipelineHandle);
 
  131    _pipelineHandle = src._pipelineHandle;
 
  132    src._pipelineHandle = 0;
 
  139        glDeleteProgramPipelines(1, &_pipelineHandle);
 
  141        _pipelineHandle = src._pipelineHandle;
 
  142        src._pipelineHandle = 0;
 
  162    glBindProgramPipeline( _pipelineHandle );
 
  168        printf( 
"\n[INFO]: /--------------------------------------------------------\\\n");
 
  169        printf( 
"[INFO]: | Program Pipeline:                                      |\n");
 
  170        printf( 
"[INFO]: |   Pipeline Handle: %4u %32c\n", _pipelineHandle, 
'|' );
 
  172        CSCI441_INTERNAL::ShaderUtils::printProgramPipelineLog(_pipelineHandle);
 
  174        printf( 
"[INFO]: >--------------------------------------------------------<\n");
 
  176        GLint vs, tcs, tes, gs, fs;
 
  177        glGetProgramPipelineiv( _pipelineHandle, GL_VERTEX_SHADER, &vs );
 
  178        glGetProgramPipelineiv( _pipelineHandle, GL_TESS_CONTROL_SHADER, &tcs );
 
  179        glGetProgramPipelineiv( _pipelineHandle, GL_TESS_EVALUATION_SHADER, &tes );
 
  180        glGetProgramPipelineiv( _pipelineHandle, GL_GEOMETRY_SHADER, &gs );
 
  181        glGetProgramPipelineiv( _pipelineHandle, GL_FRAGMENT_SHADER, &fs );
 
  183        if( vs != 0 )  printf( 
"[INFO]: |   Vertex    Shader Program Handle: %2d                  |\n", vs );
 
  184        if( tcs != 0 ) printf( 
"[INFO]: |   Tess Ctrl Shader Program Handle: %2d                  |\n", tcs );
 
  185        if( tes != 0 ) printf( 
"[INFO]: |   Tess Eval Shader Program Handle: %2d                  |\n", tes );
 
  186        if( gs != 0 )  printf( 
"[INFO]: |   Geometry  Shader Program Handle: %2d                  |\n", gs );
 
  187        if( fs != 0 )  printf( 
"[INFO]: |   Fragment  Shader Program Handle: %2d                  |\n", fs );
 
  189        printf( 
"[INFO]: \\--------------------------------------------------------/\n");
 
  196    glValidateProgramPipeline(_pipelineHandle);
 
  197    GLint validateStatus;
 
  198    glGetProgramPipelineiv(_pipelineHandle, GL_VALIDATE_STATUS, &validateStatus);
 
  199    return (validateStatus == GL_TRUE);
 
Class to work with OpenGL 4.0+ Shaders.
Handles registration and compilation of Shaders.
Definition: ShaderProgram.hpp:36
virtual GLbitfield getProgramStages() const final
returns a single value corresponding to which shader stages are present in this shader program
Definition: ShaderProgram.hpp:2124
virtual GLuint getShaderProgramHandle() const final
Returns the handle for this shader program.
Definition: ShaderProgram.hpp:1526
Handles registration and compilation of Shader Program Pipelines.
Definition: ShaderProgramPipeline.hpp:26
ShaderProgramPipeline(const ShaderProgramPipeline &)=delete
do not allow shader program pipelines to be copied
void useProgramStages(GLbitfield programStages, const ShaderProgram *shaderProgram) const
adds shader program stages to pipeline
Definition: ShaderProgramPipeline.hpp:150
ShaderProgramPipeline()
creates a shader program pipeline by generating a shader program pipeline handle
Definition: ShaderProgramPipeline.hpp:122
bool validatePipeline() const
Definition: ShaderProgramPipeline.hpp:195
void bindPipeline() const
bind shader program pipeline
Definition: ShaderProgramPipeline.hpp:160
ShaderProgramPipeline & operator=(const ShaderProgramPipeline &)=delete
do not allow shader program pipelines to be copied
~ShaderProgramPipeline()
deletes a shader program pipeline by deleting the shader program pipeline handle
Definition: ShaderProgramPipeline.hpp:126
static void disableDebugMessages()
Disables debug messages from Shader Program functions.
Definition: ShaderProgramPipeline.hpp:118
void printPipelineInfo() const
prints shader program pipeline information to console
Definition: ShaderProgramPipeline.hpp:166
CSCI441 Helper Functions for OpenGL.
Definition: ArcballCam.hpp:17