CoriEngine
Loading...
Searching...
No Matches
ShaderProgram.hpp
Go to the documentation of this file.
1#pragma once
2
3namespace Cori {
4 namespace Graphics {
6 public:
7 class Descriptor {
8 public:
9 constexpr Descriptor(std::string name, std::filesystem::path vertexPath, std::filesystem::path fragmentPath, std::filesystem::path geometryPath = {}) noexcept
10 : m_VertexPath(std::move(vertexPath)),
11 m_FragmentPath(std::move(fragmentPath)),
12 m_GeometryPath(std::move(geometryPath)),
13 m_Name(std::move(name)),
14 m_RuntimeID(s_NextRuntimeID.fetch_add(1, std::memory_order_relaxed))
15 { }
16
18
19 [[nodiscard]] uint32_t GetRuntimeID() const { return m_RuntimeID; }
20
21 constexpr bool operator==(const Descriptor& other) const noexcept {
22 return m_RuntimeID == other.m_RuntimeID;
23 }
24
25 struct Hasher {
26 std::size_t operator()(const Descriptor& handle) const noexcept {
27 return std::hash<uint32_t>{}(handle.m_RuntimeID);
28 }
29 };
30
31 const std::filesystem::path m_VertexPath;
32 const std::filesystem::path m_FragmentPath;
33 const std::filesystem::path m_GeometryPath;
34 const std::string m_Name;
35
36 private:
37 const uint32_t m_RuntimeID{ 0 };
38 inline static std::atomic<uint32_t> s_NextRuntimeID{ 1 };
39 };
40
41 virtual ~ShaderProgram() = default;
42 virtual void Bind() const = 0;
43 virtual void Unbind() const = 0;
44
45 [[nodiscard]] virtual uint32_t GetID() const = 0;
46
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;
56
57 [[nodiscard]] virtual std::string GetShaderNames() const = 0;
58
59 [[nodiscard]] static std::shared_ptr<ShaderProgram> Create(const std::filesystem::path& vertexPath, const std::filesystem::path& fragmentPath, const std::filesystem::path& geometryPath = {});
60
61 [[nodiscard]] static std::shared_ptr<ShaderProgram> Create(const Descriptor& descriptor);
62 };
63 }
64}
const std::filesystem::path m_FragmentPath
constexpr bool operator==(const Descriptor &other) const noexcept
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.
Definition Window.hpp:7
Global engine namespace.
std::size_t operator()(const Descriptor &handle) const noexcept