9 constexpr Descriptor(std::string name, std::filesystem::path vertexPath, std::filesystem::path fragmentPath, std::filesystem::path geometryPath = {})
noexcept
14 m_RuntimeID(s_NextRuntimeID.fetch_add(1, std::memory_order_relaxed))
19 [[nodiscard]] uint32_t
GetRuntimeID()
const {
return m_RuntimeID; }
22 return m_RuntimeID == other.m_RuntimeID;
27 return std::hash<uint32_t>{}(handle.m_RuntimeID);
37 const uint32_t m_RuntimeID{ 0 };
38 inline static std::atomic<uint32_t> s_NextRuntimeID{ 1 };
42 virtual void Bind()
const = 0;
45 [[nodiscard]]
virtual uint32_t
GetID()
const = 0;
47 virtual void SetBool(
const char* name,
const bool value)
const = 0;
48 virtual void SetInt(
const char* name,
const int32_t value)
const = 0;
49 virtual void SetFloat(
const char* name,
const float value)
const = 0;
50 virtual void SetVec2(
const char* name,
const glm::vec2& value)
const = 0;
51 virtual void SetVec3(
const char* name,
const glm::vec3& value)
const = 0;
52 virtual void SetVec4(
const char* name,
const glm::vec4& value)
const = 0;
53 virtual void SetMat2(
const char* name,
const glm::mat2& value)
const = 0;
54 virtual void SetMat3(
const char* name,
const glm::mat3& value)
const = 0;
55 virtual void SetMat4(
const char* name,
const glm::mat4& value)
const = 0;
59 [[nodiscard]]
static std::shared_ptr<ShaderProgram>
Create(
const std::filesystem::path& vertexPath,
const std::filesystem::path& fragmentPath,
const std::filesystem::path& geometryPath = {});
61 [[nodiscard]]
static std::shared_ptr<ShaderProgram>
Create(
const Descriptor& descriptor);
const std::filesystem::path m_FragmentPath
constexpr bool operator==(const Descriptor &other) const noexcept
uint32_t GetRuntimeID() const
const std::filesystem::path m_VertexPath
const std::filesystem::path m_GeometryPath
constexpr Descriptor(std::string name, std::filesystem::path vertexPath, std::filesystem::path fragmentPath, std::filesystem::path geometryPath={}) noexcept
virtual ~ShaderProgram()=default
virtual void SetMat4(const char *name, const glm::mat4 &value) const =0
virtual void SetInt(const char *name, const int32_t value) const =0
virtual void SetVec4(const char *name, const glm::vec4 &value) const =0
virtual void SetMat2(const char *name, const glm::mat2 &value) const =0
static std::shared_ptr< ShaderProgram > Create(const std::filesystem::path &vertexPath, const std::filesystem::path &fragmentPath, const std::filesystem::path &geometryPath={})
virtual void Bind() const =0
virtual uint32_t GetID() const =0
virtual void SetVec2(const char *name, const glm::vec2 &value) const =0
virtual void Unbind() const =0
virtual void SetFloat(const char *name, const float value) const =0
virtual void SetVec3(const char *name, const glm::vec3 &value) const =0
virtual void SetBool(const char *name, const bool value) const =0
virtual void SetMat3(const char *name, const glm::mat3 &value) const =0
virtual std::string GetShaderNames() const =0
Almost everything connected to graphics is in this namespace.
std::size_t operator()(const Descriptor &handle) const noexcept