Plasma Engine  2.0
Loading...
Searching...
No Matches
VsCodeGenerator.h
1#include <EditorPluginAssets/EditorPluginAssetsPCH.h>
2
3#include <EditorPluginAssets/MaterialAsset/MaterialAsset.h>
4#include <EditorPluginAssets/VisualShader/VisualShaderTypeRegistry.h>
5
7
9{
10public:
12
13 plStatus GenerateVisualShader(const plDocumentNodeManager* pNodeMaanger, plStringBuilder& out_sCheckPerms);
14
15 const char* GetFinalShaderCode() const { return m_sFinalShaderCode; }
16
17 void DetermineConfigFileDependencies(const plDocumentNodeManager* pNodeManager, plSet<plString>& out_cfgFiles);
18
19private:
20 struct NodeState
21 {
22 NodeState()
23 {
24 m_uiNodeId = 0;
25 m_bCodeGenerated = false;
26 m_bInProgress = false;
27 }
28
29 plUInt16 m_uiNodeId;
30 bool m_bCodeGenerated;
31 bool m_bInProgress;
32 };
33
34 struct OutputPinState
35 {
36 OutputPinState() { m_bCodeGenerated = false; }
37
38 bool m_bCodeGenerated;
39 plString m_sCodeAtPin;
40 };
41
42
43 plStatus GatherAllNodes(const plDocumentObject* pRootObj);
44 plUInt16 DeterminePinId(const plDocumentObject* pOwner, const plPin& pin) const;
45 plStatus GenerateNode(const plDocumentObject* pNode);
46 plStatus GenerateInputPinCode(plArrayPtr<const plUniquePtr<const plPin>> pins);
47 plStatus CheckPropertyValues(const plDocumentObject* pNode, const plVisualShaderNodeDescriptor* pDesc);
48 plStatus InsertPropertyValues(const plDocumentObject* pNode, const plVisualShaderNodeDescriptor* pDesc, plStringBuilder& sString);
49 plStatus GenerateOutputPinCode(const plDocumentObject* pOwnerNode, const plPin& pinSource);
50
51 plStatus ReplaceInputPinsByCode(const plDocumentObject* pOwnerNode, const plVisualShaderNodeDescriptor* pNodeDesc, plStringBuilder& sInlineCode, plStringBuilder& sCodeForPlacingDefines);
52 void SetPinDefines(const plDocumentObject* pOwnerNode, plStringBuilder& sInlineCode);
53 static void AppendStringIfUnique(plStringBuilder& inout_String, const char* szAppend);
54
55 const plDocumentObject* m_pMainNode;
56 const plVisualShaderTypeRegistry* m_pTypeRegistry;
57 const plDocumentNodeManager* m_pNodeManager;
58 const plRTTI* m_pNodeBaseRtti;
61 plMap<plInt8, plSet<plString>> m_UsedUniqueValues;
62
63 plStringBuilder m_sShaderPixelDefines;
64 plStringBuilder m_sShaderPixelIncludes;
65 plStringBuilder m_sShaderPixelConstants;
66 plStringBuilder m_sShaderPixelSamplers;
67 plStringBuilder m_sShaderPixelBody;
68 plStringBuilder m_sShaderVertexDefines;
69 plStringBuilder m_sShaderVertex;
70 plStringBuilder m_sShaderGeometryDefines;
71 plStringBuilder m_sShaderGeometry;
72 plStringBuilder m_sShaderMaterialParam;
73 plStringBuilder m_sShaderMaterialCB;
74 plStringBuilder m_sShaderRenderState;
75 plStringBuilder m_sShaderPermutations;
76 plStringBuilder m_sFinalShaderCode;
77};
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Definition DocumentNodeManager.h:141
Definition DocumentObjectBase.h:11
Definition Map.h:408
Definition DocumentNodeManager.h:59
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
Definition Set.h:238
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
A Unique ptr manages an object and destroys that object when it goes out of scope....
Definition UniquePtr.h:10
Definition VsCodeGenerator.h:9
Definition VisualShaderTypeRegistry.h:66
An plResult with an additional message for the reason of failure.
Definition Status.h:12
Definition VisualShaderTypeRegistry.h:39