// Copyright (C) 2021 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - OpenGL renderer" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_OPENGLRENDERER_WRAPPER_SHADER_HPP #define NAZARA_OPENGLRENDERER_WRAPPER_SHADER_HPP #include #include #include #include namespace Nz::GL { class Shader : public DeviceObject { friend DeviceObject; public: using DeviceObject::DeviceObject; Shader(const Shader&) = delete; Shader(Shader&&) noexcept = default; ~Shader() = default; inline void Compile(); inline bool GetCompilationStatus(std::string* error = nullptr); inline void SetBinarySource(GLenum binaryFormat, const void* binary, GLsizei length); inline void SetSource(const char* source, GLint length); inline void SetSource(const std::string_view& source); // GL_ARB_gl_spirv inline void SpecializeShader(const GLchar* pEntryPoint, GLuint numSpecializationConstants, const GLuint* pConstantIndex, const GLuint* pConstantValue); Shader& operator=(const Shader&) = delete; Shader& operator=(Shader&&) noexcept = default; private: static inline GLuint CreateHelper(OpenGLDevice& device, const Context& context, GLenum shaderStage); static inline void DestroyHelper(OpenGLDevice& device, const Context& context, GLuint objectId); }; } #include #endif // NAZARA_OPENGLRENDERER_WRAPPER_SHADER_HPP