CSEngine
Loading...
Searching...
No Matches
CSE::SMaterial Class Reference
Inheritance diagram for CSE::SMaterial:
CSE::SResource CSE::SObject CSE::VariableBinder CSE::ReflectionObject

Public Types

enum  SMaterialMode { FORWARD = 0 , DEFERRED = 1 , DEPTH_ONLY = 2 }
 

Public Member Functions

 RESOURCE_DEFINE_CONSTRUCTOR (SMaterial)
 
 SMaterial (const SMaterial *material)
 
void Exterminate () override
 
int AttachElement (int textureLayout) const
 
SMaterial::Element * GetElement (const std::string &key) const
 
const ElementsMap & GetElements () const
 
void InitElements (const ElementsMap &elements, SShaderGroup *shaders)
 
void SetInt (const std::string &name, int value)
 
void SetFloat (const std::string &name, float value)
 
void SetVec3 (const std::string &name, const vec3 &value)
 
void SetTexture (const std::string &name, SResource *texture)
 
void SetRawData (const std::string &name, std::vector< std::string > raw)
 
short GetOrderLayer () const
 
void SetOrderLayer (int orderLayer)
 
SMaterialMode GetMode () const
 
void SetMode (SMaterialMode mode)
 
SShaderGroupGetShaders () const
 
int GetTextureCount () const
 
std::string PrintMaterial () const
 
void SetValue (std::string name_str, Arguments value) override
 
std::string PrintValue () const override
 
- Public Member Functions inherited from CSE::SResource
 SResource (std::string classType)
 
 SResource (const SResource *resource, bool isRegister)
 
void SetName (std::string name)
 
void SetAbsoluteID (std::string id)
 
std::string GetName () const
 
std::string GetAbsoluteID () const
 
AssetMgr::AssetReferenceGetAssetReference (std::string hash="") const
 
void LinkResource (AssetMgr::AssetReference *asset)
 
void LinkResource (std::string name)
 
void SetHash (std::string &hash) override
 
- Public Member Functions inherited from CSE::SObject
 SObject (bool isRegister)
 
virtual void SetUndestroyable (bool enable)
 
virtual void Destroy ()
 
std::string GetHash () const
 
- Public Member Functions inherited from CSE::VariableBinder
- Public Member Functions inherited from CSE::ReflectionObject
 ReflectionObject (std::string type)
 
void SetClassType (std::string type)
 
const char * GetClassType () const
 
bool IsSameClass (const char *classType) const
 

Static Public Member Functions

static SMaterialGenerateMaterial (SShaderGroup *shaders)
 
- Static Public Member Functions inherited from CSE::SResource
template<class T >
static T * Create (const std::string &name)
 
static SResourceCreate (const std::string &name, const std::string &classType)
 
template<class T >
static T * Create (const AssetMgr::AssetReference *asset)
 
static SResourceCreate (const AssetMgr::AssetReference *asset, const std::string &classType)
 
template<class T >
static T * Get (std::string name)
 
static SResourceGet (std::string &name)
 
- Static Public Member Functions inherited from CSE::ReflectionObject
static ReflectionObjectNewObject (const std::string &name)
 

Protected Member Functions

void Init (const AssetMgr::AssetReference *asset) override
 
- Protected Member Functions inherited from CSE::SResource
- Protected Member Functions inherited from CSE::VariableBinder

Additional Inherited Members

- Protected Types inherited from CSE::VariableBinder
typedef std::vector< std::string > Arguments
 
- Protected Attributes inherited from CSE::SObject
std::string m_hash
 
- Protected Attributes inherited from CSE::ReflectionObject
std::string m_class
 

Detailed Description

Definition at line 16 of file SMaterial.h.

Member Enumeration Documentation

◆ SMaterialMode

enum CSE::SMaterial::SMaterialMode

Definition at line 18 of file SMaterial.h.

18{ FORWARD = 0, DEFERRED = 1, DEPTH_ONLY = 2 };

Constructor & Destructor Documentation

◆ SMaterial()

SMaterial::SMaterial ( const SMaterial * material)
explicit

Definition at line 17 of file SMaterial.cpp.

17 : SResource(material, false) {
18
19 if (material == nullptr) throw -1;
20
21 m_refHash = material->m_hash;
22
23 for (const auto& element_pair : material->m_elements) {
24 const auto& element_src = element_pair.second;
25 auto element_copy = new Element;
26 element_copy->count = element_src->count;
27 element_copy->type = element_src->type;
28 element_copy->valueStr = element_src->valueStr;
29 m_elements.insert(std::pair<std::string, Element*>(element_pair.first, element_copy));
30 }
31 m_mode = material->m_mode;
32 m_shaders = material->m_shaders;
33 m_orderLayer = material->m_orderLayer;
34 m_textureLayout = material->m_textureLayout;
35
36 InitElements(m_elements, m_shaders);
37 m_lightMgr = CORE->GetCore(LightMgr);
38}

◆ ~SMaterial()

SMaterial::~SMaterial ( )
override

Definition at line 40 of file SMaterial.cpp.

40 {
41 ReleaseElements();
42}

Member Function Documentation

◆ AttachElement()

int SMaterial::AttachElement ( int textureLayout) const

Definition at line 56 of file SMaterial.cpp.

56 {
57 m_textureLayout = textureLayout;
58
59 for (const auto& element_pair : m_elements) {
60 const auto& element = element_pair.second;
61 if (element->id < 0) continue;
62 element->attachFunc();
63 }
64 return m_textureLayout - textureLayout;
65}

◆ Exterminate()

void SMaterial::Exterminate ( )
overridevirtual

Implements CSE::SObject.

Definition at line 44 of file SMaterial.cpp.

44 {
45 ReleaseElements();
46}

◆ GenerateMaterial()

SMaterial * SMaterial::GenerateMaterial ( SShaderGroup * shaders)
static

Definition at line 303 of file SMaterial.cpp.

303 {
304 if (shaders == nullptr) return nullptr;
305 const auto& handle = shaders->GetHandleByMode(SMaterialMode::FORWARD);
306
307 const auto& uniformList = handle->GetUniformsList();
308 auto material = new SMaterial();
309 material->m_shaders = shaders;
310
311 for (const auto& uniform_pair : uniformList) {
312 const auto& name = uniform_pair.first;
313 const auto& gl_element = uniform_pair.second;
314
315 auto element = new Element;
316 element->id = gl_element->id;
317 element->type = XMLParser::GetType(gl_element->type);
318
319 material->m_elements.insert(std::pair<std::string, Element*>(name, element));
320 }
321 material->InitElements(material->m_elements, shaders);
322
323 return material;
324}

◆ GetElement()

SMaterial::Element * SMaterial::GetElement ( const std::string & key) const

Definition at line 67 of file SMaterial.cpp.

67 {
68 const auto& result = m_elements.find(key);
69 if(result == m_elements.end()) return nullptr;
70 return result->second;
71}

◆ GetElements()

const ElementsMap & CSE::SMaterial::GetElements ( ) const
inline

Definition at line 44 of file SMaterial.h.

44 {
45 return m_elements;
46 }

◆ GetMode()

SMaterial::SMaterialMode SMaterial::GetMode ( ) const

Definition at line 291 of file SMaterial.cpp.

291 {
292 return m_mode;
293}

◆ GetOrderLayer()

short SMaterial::GetOrderLayer ( ) const

Definition at line 279 of file SMaterial.cpp.

279 {
280 return m_orderLayer;
281}

◆ GetShaders()

SShaderGroup * SMaterial::GetShaders ( ) const

Definition at line 287 of file SMaterial.cpp.

287 {
288 return m_shaders;
289}

◆ GetTextureCount()

int SMaterial::GetTextureCount ( ) const

Definition at line 299 of file SMaterial.cpp.

299 {
300 return m_textureLayout;
301}

◆ Init()

void SMaterial::Init ( const AssetMgr::AssetReference * asset)
overrideprotectedvirtual

Implements CSE::SResource.

Definition at line 122 of file SMaterial.cpp.

122 {
123 const XNode* root;
124
125 try {
126 root = XFILE(asset->name_path.c_str()).getRoot();
127 }
128 catch (int e) {
129 return;
130 }
131
132 XNode cse_mat = root->getChild("CSEMAT");
133 XNode shader_node = cse_mat.getChild("shader");
134
135 auto var_nodes = shader_node.children;
136 auto shader_file_id = shader_node.getAttribute("id").value;
137 auto shaderGroup = Create<SShaderGroup>(shader_file_id);
138 if (shaderGroup == nullptr) return;
139 m_shaders = shaderGroup;
140
141 if (shader_node.hasAttribute("deferred")) {
142 auto get_deferred = std::stoi(shader_node.getAttribute("deferred").value);
143 if (get_deferred == 1) {
144 m_mode = DEFERRED;
145 }
146 }
147
148 for (const auto& node : var_nodes) {
149
150 auto element_value = node.value.toStringVector();
151 auto element_type = node.getAttribute("type").value;
152 SType type = XMLParser::GetType(element_type);
153 auto element_name = node.getAttribute("name").value;
154 auto element_count = node.getAttribute("count").value;
155
156 auto element = new Element;
157 element->type = type;
158 element->count = std::stoi(element_count);
159 element->valueStr = element_value;
160 m_elements.insert(std::pair<std::string, Element*>(element_name, element));
161 }
162 SAFE_DELETE(root);
163}
Definition XML.h:77
Definition XML.h:43

◆ InitElements()

void SMaterial::InitElements ( const ElementsMap & elements,
SShaderGroup * shaders )

Definition at line 73 of file SMaterial.cpp.

73 {
74 const auto& handle = shaders->GetHandleByMode(m_mode);
75 for (const auto& element_pair : elements) {
76 const auto& element_name = element_pair.first.c_str();
77 const auto& element = element_pair.second;
78 if (element->attachFunc != nullptr) continue;
79
80 const auto& handleElement = handle->UniformLocation(element_name);
81 if (handleElement == nullptr) continue;
82
83 element->id = handleElement->id;
84 SetBindFuncByType(element);
85 }
86// std::string str = PrintMaterial();
87// std::string path = GetAssetReference(m_refHash)->path;
88// SaveTxtFile(path, str);
89}

◆ PrintMaterial()

std::string SMaterial::PrintMaterial ( ) const

Definition at line 326 of file SMaterial.cpp.

326 {
327 std::string result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
328 "<CSEMAT version=\"1.0.0\">\n";
329
330 if(m_mode == DEFERRED) {
331 result += "<shader id=\"" + m_shaders->GetHash() + "\" deferred=\"1\">\n";
332 }
333 else {
334 result += "<shader id=\"" + m_shaders->GetHash() + "\">\n";
335 }
336
337 for (const auto& var : m_elements) {
338 const auto& element = var.second;
339 if(element->raw.empty()) continue;
340
341 result += "<var name=\"" + var.first
342 + "\" type=\"" + XMLParser::ToString(element->type)
343 + "\" count=\"1\">"
344 + element->raw + "</var>\n";
345 }
346 result += "</shader>\n</CSEMAT>";
347 return result;
348}

◆ PrintValue()

std::string SMaterial::PrintValue ( ) const
overridevirtual

Implements CSE::VariableBinder.

Definition at line 354 of file SMaterial.cpp.

354 {
355 return {};
356}

◆ SetFloat()

void SMaterial::SetFloat ( const std::string & name,
float value )

Definition at line 97 of file SMaterial.cpp.

97 {
98 auto find_iter = m_elements.find(name);
99 if (find_iter == m_elements.end()) return;
100 SetFloatFunc(find_iter->second, value);
101}

◆ SetInt()

void SMaterial::SetInt ( const std::string & name,
int value )

Definition at line 91 of file SMaterial.cpp.

91 {
92 auto find_iter = m_elements.find(name);
93 if (find_iter == m_elements.end()) return;
94 SetIntFunc(find_iter->second, value);
95}

◆ SetMode()

void SMaterial::SetMode ( SMaterialMode mode)

Definition at line 295 of file SMaterial.cpp.

295 {
296 m_mode = mode;
297}

◆ SetOrderLayer()

void SMaterial::SetOrderLayer ( int orderLayer)

Definition at line 283 of file SMaterial.cpp.

283 {
284 m_orderLayer = orderLayer;
285}

◆ SetRawData()

void SMaterial::SetRawData ( const std::string & name,
std::vector< std::string > raw )

Definition at line 115 of file SMaterial.cpp.

115 {
116 auto find_iter = m_elements.find(name);
117 if (find_iter == m_elements.end()) return;
118 find_iter->second->valueStr = std::move(raw);
119 SetBindFuncByType(find_iter->second);
120}

◆ SetTexture()

void SMaterial::SetTexture ( const std::string & name,
SResource * texture )

Definition at line 109 of file SMaterial.cpp.

109 {
110 auto find_iter = m_elements.find(name);
111 if (find_iter == m_elements.end()) return;
112 SetTextureFunc(find_iter->second, texture);
113}

◆ SetValue()

void SMaterial::SetValue ( std::string name_str,
Arguments value )
overridevirtual

Used to get serialized values. All classes that inherit from VariableBinder will unconditionally call this function first during initialization.

Parameters
name_strName of values
valueSerialized values

Implements CSE::VariableBinder.

Definition at line 350 of file SMaterial.cpp.

350 {
351
352}

◆ SetVec3()

void SMaterial::SetVec3 ( const std::string & name,
const vec3 & value )

Definition at line 103 of file SMaterial.cpp.

103 {
104 auto find_iter = m_elements.find(name);
105 if (find_iter == m_elements.end()) return;
106 SetVec3Func(find_iter->second, value);
107}

The documentation for this class was generated from the following files: