Polyphase Game Engine
Loading...
Searching...
No Matches
Material.h
Go to the documentation of this file.
1#pragma once
2
3#include "Asset.h"
4#include "EngineTypes.h"
5#include "Datum.h"
6
7#include "Texture.h"
8#include "AssetRef.h"
9
10#include "Maths.h"
11#include <string>
12#include <vector>
13#include <map>
14
15#include "Enums.h"
16#include "Asset.h"
17#include "AssetRef.h"
18#include "Constants.h"
19#include "EngineTypes.h"
20#include "Vertex.h"
21
22class NodeGraph;
23
24class Material;
26class MaterialLite;
27class Texture;
28
30{
31 Scalar,
32 Vector,
33 Texture,
34
35 Count
36};
37
39{
40 std::string mName;
41 glm::vec4 mFloatValue = { }; // Holds scalar and vector values.
42 TextureRef mTextureValue; // Only used when Texture param type.
44 uint32_t mOffset = 0; // Byte offset for uniforms, binding location for textures.
45};
46
48{
49public:
50
52
53 virtual void LoadStream(Stream& stream, Platform platform) override;
54 virtual void SaveStream(Stream& stream, Platform platform) override;
55 virtual void Create() override;
56 virtual void Destroy() override;
57 virtual bool Import(const std::string& path, ImportOptions* options) override;
58 virtual void GatherProperties(std::vector<Property>& outProps) override;
59
60 virtual glm::vec4 GetTypeColor() override;
61 virtual const char* GetTypeName() override;
62 virtual bool ShouldSnapshotForPie() const override { return true; }
63
64 MaterialResource* GetResource();
65
66 virtual bool IsBase() const;
67 virtual bool IsInstance() const;
68 virtual bool IsLite() const;
69 MaterialLite* AsLite();
70
71
72 std::vector<ShaderParameter>& GetParameters();
73
74 void SetScalarParameter(const std::string& name, float value);
75 void SetVectorParameter(const std::string& name, glm::vec4 value);
76 void SetTextureParameter(const std::string& name, Texture* value);
77
78 float GetScalarParameter(const std::string& name);
79 glm::vec4 GetVectorParameter(const std::string& name);
80 Texture* GetTextureParameter(const std::string& name);
81
82 void WriteShaderUniformParams(uint8_t* outData, uint32_t& outSize);
83
84 virtual BlendMode GetBlendMode() const;
85 virtual float GetMaskCutoff() const;
86 virtual int32_t GetSortPriority() const;
87 virtual bool IsDepthTestDisabled() const;
88 virtual bool ShouldApplyFog() const;
89 virtual CullMode GetCullMode() const;
90
91 // Node graph integration hooks
92 virtual bool HasNodeGraph() const { return false; }
93 virtual NodeGraph* GetNodeGraph() { return nullptr; }
94 virtual void ApplyGraphValues(NodeGraph* graph) {}
95
96 static MaterialLite* AsLite(Material* material);
97 static void OverwriteShaderParameters(std::vector<ShaderParameter>& dst, const std::vector<ShaderParameter>& src);
98
99protected:
100
101 std::vector<ShaderParameter> mParameters;
102
103 // Graphics Resource
105};
106
CullMode
Definition EngineTypes.h:139
Platform
Definition EngineTypes.h:31
BlendMode
Definition EngineTypes.h:106
ShaderParameterType
Definition Material.h:30
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AssetRef.h:18
Definition Asset.h:113
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:244
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:236
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:254
virtual const char * GetTypeName()
Definition Asset.cpp:259
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:249
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:222
virtual void Destroy()
Definition Asset.cpp:87
Definition Asset.h:102
Definition MaterialInstance.h:8
Definition MaterialLite.h:38
Definition Material.h:48
MaterialResource mResource
Definition Material.h:104
virtual NodeGraph * GetNodeGraph()
Definition Material.h:93
virtual bool ShouldSnapshotForPie() const override
Definition Material.h:62
virtual void ApplyGraphValues(NodeGraph *graph)
Definition Material.h:94
virtual bool HasNodeGraph() const
Definition Material.h:92
DECLARE_ASSET(Material, Asset)
std::vector< ShaderParameter > mParameters
Definition Material.h:101
Definition NodeGraph.h:17
Definition Stream.h:21
Definition Texture.h:10
Definition GraphicsTypes.h:154
Definition Material.h:39
std::string mName
Definition Material.h:40
glm::vec4 mFloatValue
Definition Material.h:41
TextureRef mTextureValue
Definition Material.h:42
uint32_t mOffset
Definition Material.h:44
ShaderParameterType mType
Definition Material.h:43