.. _program_listing_file_gui_Demeter_Renderer_Shader.hpp: Program Listing for File Shader.hpp =================================== |exhale_lsh| :ref:`Return to documentation for file ` (``gui/Demeter/Renderer/Shader.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include class Shader { protected: GLenum _type = 0; // NOLINT GLuint _shader = 0; // NOLINT public: Shader(GLenum type) : _type(type) {} Shader(const Shader &) = delete; Shader &operator=(const Shader &) = delete; ~Shader(); [[nodiscard]] bool Init(const std::string &path); [[nodiscard]] virtual GLuint Get() const { return _shader; } }; class VertexShader : public Shader { public: VertexShader() : Shader(GL_VERTEX_SHADER) {} }; class FragmentShader : public Shader { public: FragmentShader() : Shader(GL_FRAGMENT_SHADER) {} }; struct ShaderProgram { private: GLuint program = 0; std::unique_ptr vs; std::unique_ptr fs; public: ShaderProgram() = default; ShaderProgram(const ShaderProgram &) = delete; ShaderProgram &operator=(const ShaderProgram &) = delete; ~ShaderProgram(); [[nodiscard]] bool Init( std::unique_ptr vertexShader, std::unique_ptr fragmentShader); [[nodiscard]] GLuint Get() const { return program; } void Use() const { glUseProgram(program); } [[nodiscard]] GLint GetUniformLocation(const std::string &name) const { return glGetUniformLocation(program, name.c_str()); } };