CoriEngine
Loading...
Searching...
No Matches
GL_ShaderProgram.hpp
Go to the documentation of this file.
1#pragma once
4
5namespace Cori {
6 namespace Graphics {
7 namespace Internal {
8 class OpenGLShaderProgram final : public ShaderProgram, public Profiling::Trackable<OpenGLShaderProgram, ShaderProgram> {
9 public:
10 OpenGLShaderProgram(const std::filesystem::path& vertexPath, const std::filesystem::path& fragmentPath, const std::filesystem::path& geometryPath);
11 ~OpenGLShaderProgram() override;
12
13 void Bind() const override;
14 void Unbind() const override;
15
16 uint32_t GetID() const override { return m_ID; }
17
18 void SetBool(const char* name, const bool value) const override;
19 void SetInt(const char* name, const int32_t value) const override;
20 void SetFloat(const char* name, const float value) const override;
21 void SetVec2(const char* name, const glm::vec2& value) const override;
22 void SetVec3(const char* name, const glm::vec3& value) const override;
23 void SetVec4(const char* name, const glm::vec4& value) const override;
24 void SetMat2(const char* name, const glm::mat2& value) const override;
25 void SetMat3(const char* name, const glm::mat3& value) const override;
26 void SetMat4(const char* name, const glm::mat4& value) const override;
27
28 std::string GetShaderNames() const override { return m_ShaderNames; }
29 private:
30 struct TransparentHash {
31 using is_transparent = void;
32 size_t operator()(std::string_view sv) const noexcept {
33 return std::hash<std::string_view>{}(sv);
34 }
35 };
36
37 struct TransparentEqual {
38 using is_transparent = void;
39 bool operator()(std::string_view lhs, std::string_view rhs) const noexcept {
40 return lhs == rhs;
41 }
42 };
43
44 uint32_t m_ID;
45 bool m_CreationSuccessful{ true };
46
47 mutable std::unordered_map<std::string, int32_t, TransparentHash, TransparentEqual> m_UniformLocations;
48
49 std::string m_DebugName;
50
51 std::string m_ShaderNames;
52
53 bool CheckCompileErrors(uint32_t shader, std::string type);
54 };
55 }
56 }
57}
void SetVec3(const char *name, const glm::vec3 &value) const override
void SetInt(const char *name, const int32_t value) const override
void SetMat4(const char *name, const glm::mat4 &value) const override
void SetBool(const char *name, const bool value) const override
void SetVec4(const char *name, const glm::vec4 &value) const override
void SetMat3(const char *name, const glm::mat3 &value) const override
void SetVec2(const char *name, const glm::vec2 &value) const override
OpenGLShaderProgram(const std::filesystem::path &vertexPath, const std::filesystem::path &fragmentPath, const std::filesystem::path &geometryPath)
void SetFloat(const char *name, const float value) const override
void SetMat2(const char *name, const glm::mat2 &value) const override
For InstanceMetrics to work with a type it should derive from this.
Definition Trackable.hpp:29
Almost everything connected to graphics is in this namespace.
Definition Window.hpp:7
Global engine namespace.