CSEngine
Loading...
Searching...
No Matches
SShaderGroup.h
1#pragma once
2
3#include "../../Object/SResource.h"
4#include <unordered_map>
5
6namespace CSE {
7
8 class GLProgramHandle;
9
10 class SShaderGroup : public SResource {
11 public:
12 RESOURCE_DEFINE_CONSTRUCTOR(SShaderGroup);
13
14 ~SShaderGroup() override;
15
16 void Exterminate() override;
17
18 const GLProgramHandle* GetHandle(const std::string& pass) const;
19 const GLProgramHandle* GetHandleByMode(int mode) const;
20 const GLProgramHandle* GetGeometryHandle() const {
21 return m_geometryHandle;
22 }
23 const GLProgramHandle* GetForwardHandle() const {
24 return m_forwardHandle;
25 }
26 const GLProgramHandle* GetDepthOnlyHandle() const {
27 return m_depthOnlyHandle;
28 }
29
30 void SetValue(std::string name_str, Arguments value) override;
31
32 std::string PrintValue() const override;
33
34 protected:
35 void Init(const AssetMgr::AssetReference* asset) override;
36
37 private:
38 static std::string GetShaderHash(const std::string& vert_path, const std::string& frag_path);
39
40 private:
41 std::unordered_map<std::string, GLProgramHandle*> m_handles;
42 GLProgramHandle* m_geometryHandle = nullptr;
43 GLProgramHandle* m_forwardHandle = nullptr;
44 GLProgramHandle* m_depthOnlyHandle = nullptr;
45 };
46}
void SetValue(std::string name_str, Arguments value) override