#pragma once #include #ifdef _WIN32 # include #endif #include #include namespace scwx { namespace qt { namespace gl { class ShaderProgram { public: explicit ShaderProgram(OpenGLFunctions& gl); virtual ~ShaderProgram(); ShaderProgram(const ShaderProgram&) = delete; ShaderProgram& operator=(const ShaderProgram&) = delete; ShaderProgram(ShaderProgram&&) noexcept; ShaderProgram& operator=(ShaderProgram&&) noexcept; GLuint id() const; GLint GetUniformLocation(const std::string& name); bool Load(const std::string& vertexPath, const std::string& fragmentPath); bool Load(std::initializer_list> shaderPaths); void Use() const; private: class Impl; std::unique_ptr p; }; } // namespace gl } // namespace qt } // namespace scwx