\doxysection{Shader\+Graph.\+h} \hypertarget{_shader_graph_8h_source}{}\label{_shader_graph_8h_source}\index{Include/Graph/ShaderGraph.h@{Include/Graph/ShaderGraph.h}} \begin{DoxyCode}{0} \DoxyCodeLine{00001\ \textcolor{comment}{//\ =====================================================================================================================}} \DoxyCodeLine{00002\ \textcolor{comment}{//\ \ OpenShaderDesigner,\ an\ open\ source\ software\ utility\ to\ create\ materials\ and\ shaders.}} \DoxyCodeLine{00003\ \textcolor{comment}{//\ \ Copyright\ (C)\ 2024\ \ Medusa\ Slockbower}} \DoxyCodeLine{00004\ \textcolor{comment}{//}} \DoxyCodeLine{00005\ \textcolor{comment}{//\ \ This\ program\ is\ free\ software:\ you\ can\ redistribute\ it\ and/or\ modify}} \DoxyCodeLine{00006\ \textcolor{comment}{//\ \ it\ under\ the\ terms\ of\ the\ GNU\ General\ Public\ License\ as\ published\ by}} \DoxyCodeLine{00007\ \textcolor{comment}{//\ \ the\ Free\ Software\ Foundation,\ either\ version\ 3\ of\ the\ License,\ or}} \DoxyCodeLine{00008\ \textcolor{comment}{//\ \ (at\ your\ option)\ any\ later\ version.}} \DoxyCodeLine{00009\ \textcolor{comment}{//}} \DoxyCodeLine{00010\ \textcolor{comment}{//\ \ This\ program\ is\ distributed\ in\ the\ hope\ that\ it\ will\ be\ useful,}} \DoxyCodeLine{00011\ \textcolor{comment}{//\ \ but\ WITHOUT\ ANY\ WARRANTY;\ without\ even\ the\ implied\ warranty\ of}} \DoxyCodeLine{00012\ \textcolor{comment}{//\ \ MERCHANTABILITY\ or\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE.\ \ See\ the}} \DoxyCodeLine{00013\ \textcolor{comment}{//\ \ GNU\ General\ Public\ License\ for\ more\ details.}} \DoxyCodeLine{00014\ \textcolor{comment}{//}} \DoxyCodeLine{00015\ \textcolor{comment}{//\ \ You\ should\ have\ received\ a\ copy\ of\ the\ GNU\ General\ Public\ License}} \DoxyCodeLine{00016\ \textcolor{comment}{//\ \ along\ with\ this\ program.\ \ If\ not,\ see\ .}} \DoxyCodeLine{00017\ \textcolor{comment}{//\ =====================================================================================================================}} \DoxyCodeLine{00018\ } \DoxyCodeLine{00019\ \textcolor{preprocessor}{\#ifndef\ OSD\_SHADERGRAPH\_H}} \DoxyCodeLine{00020\ \textcolor{preprocessor}{\#define\ OSD\_SHADERGRAPH\_H}} \DoxyCodeLine{00021\ } \DoxyCodeLine{00022\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00023\ } \DoxyCodeLine{00024\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00025\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00026\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00027\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00028\ } \DoxyCodeLine{00029\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00030\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00031\ } \DoxyCodeLine{00032\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00033\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00034\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00035\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00036\ } \DoxyCodeLine{00037\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00038\ } \DoxyCodeLine{00039\ \textcolor{preprocessor}{\#include\ "{}FileSystem/FileManager.h"{}}} \DoxyCodeLine{00040\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{00041\ } \DoxyCodeLine{00042\ } \DoxyCodeLine{00043\ \textcolor{keyword}{namespace\ }ocu\ =\ open\_cpp\_utils;} \DoxyCodeLine{00044\ } \DoxyCodeLine{00045\ \textcolor{preprocessor}{\#define\ RegisterNode(Name,\ Type)\ \(\backslash\)}} \DoxyCodeLine{00046\ \textcolor{preprocessor}{\ \ \ \ inline\ Node*\ Create\#\#Type(ShaderGraph\&\ graph,\ ImVec2\ pos)\ \{\ return\ new\ Type(graph,\ pos);\ \}\ \(\backslash\)}} \DoxyCodeLine{00047\ \textcolor{preprocessor}{\ \ \ \ STARTUP(\_Register\#\#Type)\ \{\ ShaderGraph::Register(Name,\ Create\#\#Type);\ \}}} \DoxyCodeLine{00048\ } \DoxyCodeLine{00049\ \textcolor{keyword}{namespace\ }OpenShaderDesigner} \DoxyCodeLine{00050\ \{} \DoxyCodeLine{00051\ \ \ \ \ \textcolor{keyword}{class\ }ShaderGraph;} \DoxyCodeLine{00052\ } \DoxyCodeLine{00053\ \ \ \ \ \textcolor{keyword}{using\ }PinType\ =\ int;} \DoxyCodeLine{00054\ \ \ \ \ \textcolor{keyword}{enum}\ PinType\_} \DoxyCodeLine{00055\ \ \ \ \ \{} \DoxyCodeLine{00056\ \ \ \ \ \ \ \ \ PinType\_UInt\ =\ 0} \DoxyCodeLine{00057\ \ \ \ \ ,\ \ \ PinType\_Int} \DoxyCodeLine{00058\ \ \ \ \ ,\ \ \ PinType\_Float} \DoxyCodeLine{00059\ \ \ \ \ ,\ \ \ PinType\_Vector} \DoxyCodeLine{00060\ } \DoxyCodeLine{00061\ \ \ \ \ ,\ \ \ PinType\_Any} \DoxyCodeLine{00062\ \ \ \ \ ,\ \ \ PinType\_COUNT} \DoxyCodeLine{00063\ \ \ \ \ \};} \DoxyCodeLine{00064\ } \DoxyCodeLine{00065\ \ \ \ \ \textcolor{keyword}{using\ }FlagT\ =\ \textcolor{keywordtype}{unsigned}\ int;} \DoxyCodeLine{00066\ \ \ \ \ \textcolor{keyword}{enum}\ PinFlags\_} \DoxyCodeLine{00067\ \ \ \ \ \{} \DoxyCodeLine{00068\ \ \ \ \ \ \ \ \ PinFlags\_None\ \ \ \ \ \ \ \ \ \ \ =\ 0} \DoxyCodeLine{00069\ \ \ \ \ ,\ \ \ PinFlags\_NoCollapse\ \ \ \ \ =\ 1\ <<\ 0} \DoxyCodeLine{00070\ \ \ \ \ ,\ \ \ PinFlags\_AlwaysCollapse\ =\ 1\ <<\ 1} \DoxyCodeLine{00071\ \ \ \ \ ,\ \ \ PinFlags\_NoPadding\ \ \ \ \ \ =\ 1\ <<\ 2} \DoxyCodeLine{00072\ \ \ \ \ ,\ \ \ PinFlags\_Ambiguous\ \ \ \ \ \ =\ 1\ <<\ 3} \DoxyCodeLine{00073\ \ \ \ \ \};} \DoxyCodeLine{00074\ \ \ \ \ } \DoxyCodeLine{00075\ \ \ \ \ \textcolor{keyword}{enum}\ InterpolationType\_\ :\ glw::enum\_t} \DoxyCodeLine{00076\ \ \ \ \ \{} \DoxyCodeLine{00077\ \ \ \ \ \ \ \ \ InterpolationType\_Flat\ =\ 0} \DoxyCodeLine{00078\ \ \ \ \ ,\ \ \ InterpolationType\_Screen} \DoxyCodeLine{00079\ \ \ \ \ ,\ \ \ InterpolationType\_Smooth} \DoxyCodeLine{00080\ \ \ \ \ \};} \DoxyCodeLine{00081\ } \DoxyCodeLine{00082\ \ \ \ \ \textcolor{keyword}{struct\ }\mbox{\hyperlink{struct_open_shader_designer_1_1_pin}{Pin}}} \DoxyCodeLine{00083\ \ \ \ \ \{} \DoxyCodeLine{00084\ \ \ \ \ \ \ \ \ \textcolor{keyword}{inline}\ \textcolor{keyword}{const}\ \textcolor{keyword}{static}\ ImColor\ Colors[PinType\_COUNT]\ =\ \{} \DoxyCodeLine{00085\ \ \ \ \ \ \ \ \ \ \ \ \ ImColor(0x7A,\ 0x9F,\ 0x82)\ \textcolor{comment}{//\ Unsigned\ Int}} \DoxyCodeLine{00086\ \ \ \ \ \ \ \ \ ,\ \ \ ImColor(0x64,\ 0x94,\ 0xAA)\ \textcolor{comment}{//\ Int}} \DoxyCodeLine{00087\ \ \ \ \ \ \ \ \ ,\ \ \ ImColor(0xA6,\ 0x3D,\ 0x40)\ \textcolor{comment}{//\ Float}} \DoxyCodeLine{00088\ \ \ \ \ \ \ \ \ ,\ \ \ ImColor(0xE9,\ 0xB8,\ 0x72)\ \textcolor{comment}{//\ Vector}} \DoxyCodeLine{00089\ \ \ \ \ \ \ \ \ ,\ \ \ ImColor(0xFF,\ 0xFF,\ 0xFF)\ \textcolor{comment}{//\ Any}} \DoxyCodeLine{00090\ \ \ \ \ \ \ \ \ \};} \DoxyCodeLine{00091\ } \DoxyCodeLine{00092\ \ \ \ \ \ \ \ \ \textcolor{keyword}{inline}\ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ TypeNames[PinType\_COUNT]\ =\ \{} \DoxyCodeLine{00093\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Unsigned\ Int"{}}} \DoxyCodeLine{00094\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}Int"{}}} \DoxyCodeLine{00095\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}Float"{}}} \DoxyCodeLine{00096\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}Vector"{}}} \DoxyCodeLine{00097\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}Any"{}}} \DoxyCodeLine{00098\ \ \ \ \ \ \ \ \ \};} \DoxyCodeLine{00099\ } \DoxyCodeLine{00100\ \ \ \ \ \ \ \ \ \textcolor{keyword}{inline}\ \textcolor{keyword}{const}\ \textcolor{keyword}{static}\ std::string\ TypeKeywords[PinType\_COUNT]\ =\ \{} \DoxyCodeLine{00101\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}uint"{}}} \DoxyCodeLine{00102\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}int"{}}} \DoxyCodeLine{00103\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}float"{}}} \DoxyCodeLine{00104\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}vec3"{}}} \DoxyCodeLine{00105\ \ \ \ \ \ \ \ \ ,\ \ \ \textcolor{stringliteral}{"{}vec3"{}}} \DoxyCodeLine{00106\ \ \ \ \ \ \ \ \ \};} \DoxyCodeLine{00107\ } \DoxyCodeLine{00108\ \ \ \ \ \ \ \ \ \textcolor{keyword}{inline}\ \textcolor{keyword}{const}\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ TypeWidths[PinType\_COUNT]\ =\ \{} \DoxyCodeLine{00109\ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \textcolor{comment}{//\ Unsigned\ Int}} \DoxyCodeLine{00110\ \ \ \ \ \ \ \ \ ,\ \ \ \ 1\ \textcolor{comment}{//\ Int}} \DoxyCodeLine{00111\ \ \ \ \ \ \ \ \ ,\ \ \ \ 1\ \textcolor{comment}{//\ Float}} \DoxyCodeLine{00112\ \ \ \ \ \ \ \ \ ,\ \ \ \ 3\ \textcolor{comment}{//\ Vector}} \DoxyCodeLine{00113\ \ \ \ \ \ \ \ \ ,\ \ \ -\/1\ \textcolor{comment}{//\ Any}} \DoxyCodeLine{00114\ \ \ \ \ \ \ \ \ \};} \DoxyCodeLine{00115\ } \DoxyCodeLine{00116\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }Ambiguous\ =\ ocu::any;} \DoxyCodeLine{00117\ } \DoxyCodeLine{00118\ \ \ \ \ \ \ \ \ std::string\ Name;} \DoxyCodeLine{00119\ \ \ \ \ \ \ \ \ PinType\ \ \ \ \ Type;} \DoxyCodeLine{00120\ \ \ \ \ \ \ \ \ FlagT\ \ \ \ \ \ \ Flags;} \DoxyCodeLine{00121\ \ \ \ \ \ \ \ \ Ambiguous\ \ \ Value;} \DoxyCodeLine{00122\ \ \ \ \ \ \ \ \ ImPinPtr\ \ \ \ Ptr;} \DoxyCodeLine{00123\ } \DoxyCodeLine{00124\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_pin}{Pin}}(\textcolor{keyword}{const}\ std::string\&\ name,\ PinType\ type,\ FlagT\ flags\ =\ PinFlags\_None)} \DoxyCodeLine{00125\ \ \ \ \ \ \ \ \ \ \ \ \ :\ Name(name)} \DoxyCodeLine{00126\ \ \ \ \ \ \ \ \ \ \ \ \ ,\ Type(type)} \DoxyCodeLine{00127\ \ \ \ \ \ \ \ \ \ \ \ \ ,\ Flags(flags)} \DoxyCodeLine{00128\ \ \ \ \ \ \ \ \ \{\ \}} \DoxyCodeLine{00129\ } \DoxyCodeLine{00130\ \ \ \ \ \ \ \ \ std::string\ GetVarName()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ std::format(\textcolor{stringliteral}{"{}\{\}\_\{\}"{}},\ Name,\ Ptr.Node);\ \}} \DoxyCodeLine{00131\ \ \ \ \ \};} \DoxyCodeLine{00132\ } \DoxyCodeLine{00133\ \ \ \ \ \textcolor{keyword}{enum}\ NodeFlags\_} \DoxyCodeLine{00134\ \ \ \ \ \{} \DoxyCodeLine{00135\ \ \ \ \ \ \ \ \ NodeFlags\_None\ \ \ \ \ \ \ \ \ \ \ =\ 0} \DoxyCodeLine{00136\ \ \ \ \ ,\ \ \ NodeFlags\_Const\ \ \ \ \ \ \ \ \ \ =\ 0x0000'0001} \DoxyCodeLine{00137\ \ \ \ \ ,\ \ \ NodeFlags\_DynamicInputs\ \ =\ 0x0000'0002} \DoxyCodeLine{00138\ \ \ \ \ ,\ \ \ NodeFlags\_DynamicOutputs\ =\ 0x0000'0004} \DoxyCodeLine{00139\ \ \ \ \ \};} \DoxyCodeLine{00140\ } \DoxyCodeLine{00141\ \ \ \ \ \textcolor{keyword}{struct\ }\mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}}} \DoxyCodeLine{00142\ \ \ \ \ \{} \DoxyCodeLine{00143\ \ \ \ \ \textcolor{keyword}{public}:} \DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ Graph;} \DoxyCodeLine{00145\ \ \ \ \ \ \ \ \ ImVec2\ \ \ \ \ \ \ Position\ =\ \{\ 0,\ 0\ \};} \DoxyCodeLine{00146\ } \DoxyCodeLine{00147\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct}} \DoxyCodeLine{00148\ \ \ \ \ \ \ \ \ \{} \DoxyCodeLine{00149\ \ \ \ \ \ \ \ \ \ \ \ \ std::string\ Title;} \DoxyCodeLine{00150\ \ \ \ \ \ \ \ \ \ \ \ \ ImColor\ \ \ \ \ Color,\ HoveredColor,\ ActiveColor;} \DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ \ \ \ \ \ \ \ Enabled;} \DoxyCodeLine{00152\ \ \ \ \ \ \ \ \ \}\ Header;} \DoxyCodeLine{00153\ } \DoxyCodeLine{00154\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct}} \DoxyCodeLine{00155\ \ \ \ \ \ \ \ \ \{} \DoxyCodeLine{00156\ \ \ \ \ \ \ \ \ \ \ \ \ std::vector\ Inputs,\ Outputs;} \DoxyCodeLine{00157\ \ \ \ \ \ \ \ \ \}\ IO;} \DoxyCodeLine{00158\ } \DoxyCodeLine{00159\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct}} \DoxyCodeLine{00160\ \ \ \ \ \ \ \ \ \{} \DoxyCodeLine{00161\ \ \ \ \ \ \ \ \ \ \ \ \ std::string\ Alias;} \DoxyCodeLine{00162\ \ \ \ \ \ \ \ \ \ \ \ \ FlagT\ \ \ \ \ \ \ Flags;} \DoxyCodeLine{00163\ \ \ \ \ \ \ \ \ \}\ Info;} \DoxyCodeLine{00164\ } \DoxyCodeLine{00165\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}}(\mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ graph,\ ImVec2\ pos);} \DoxyCodeLine{00166\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \mbox{\hyperlink{struct_open_shader_designer_1_1_node}{\string~Node}}()\ =\ \textcolor{keywordflow}{default};} \DoxyCodeLine{00167\ } \DoxyCodeLine{00168\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ DrawPin(\textcolor{keywordtype}{int}\ \textcolor{keywordtype}{id},\ \mbox{\hyperlink{struct_open_shader_designer_1_1_pin}{Pin}}\&\ pin,\ ImPinDirection\ direction);} \DoxyCodeLine{00169\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ Draw(ImGuiID\ \textcolor{keywordtype}{id});} \DoxyCodeLine{00170\ } \DoxyCodeLine{00171\ \ \ \ \ \ \ \ \ \textcolor{keyword}{inline}\ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{bool}\ CheckConnection(\mbox{\hyperlink{struct_open_shader_designer_1_1_pin}{Pin}}*,\ \mbox{\hyperlink{struct_open_shader_designer_1_1_pin}{Pin}}*)\ \{\ \textcolor{keywordflow}{return}\ \textcolor{keyword}{true};\ \}} \DoxyCodeLine{00172\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ ValidateConnections()\ \{\ \}} \DoxyCodeLine{00173\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00174\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}}*\ Copy(\mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ graph)\ \textcolor{keyword}{const}\ =\ 0;} \DoxyCodeLine{00175\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ Inspect()\ =\ 0;} \DoxyCodeLine{00176\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ std::string\ GetCode()\ \textcolor{keyword}{const}\ =\ 0;} \DoxyCodeLine{00177\ \ \ \ \ \};} \DoxyCodeLine{00178\ \ \ \ \ } \DoxyCodeLine{00179\ \ \ \ \ \textcolor{keyword}{using\ }NodeList\ =\ ocu::object\_list;} \DoxyCodeLine{00180\ \ \ \ \ \textcolor{keyword}{using\ }NodeId\ =\ NodeList::uuid\_type;} \DoxyCodeLine{00181\ } \DoxyCodeLine{00182\ \ \ \ \ \textcolor{keyword}{struct\ }\mbox{\hyperlink{struct_open_shader_designer_1_1_attribute}{Attribute}}} \DoxyCodeLine{00183\ \ \ \ \ \{} \DoxyCodeLine{00184\ \ \ \ \ \ \ \ \ std::string\ Name;} \DoxyCodeLine{00185\ \ \ \ \ \ \ \ \ glw::enum\_t\ Type;} \DoxyCodeLine{00186\ \ \ \ \ \ \ \ \ glw::enum\_t\ Interpolation;} \DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ glw::size\_t\ Count;} \DoxyCodeLine{00188\ \ \ \ \ \};} \DoxyCodeLine{00189\ } \DoxyCodeLine{00190\ \ \ \ \ \textcolor{keyword}{struct\ }\mbox{\hyperlink{struct_open_shader_designer_1_1_parameter}{Parameter}}} \DoxyCodeLine{00191\ \ \ \ \ \{} \DoxyCodeLine{00192\ \ \ \ \ \ \ \ \ std::string\ Name;} \DoxyCodeLine{00193\ \ \ \ \ \ \ \ \ glw::enum\_t\ Type;} \DoxyCodeLine{00194\ \ \ \ \ \ \ \ \ glw::size\_t\ Count;\ \textcolor{comment}{//\ For\ arrays}} \DoxyCodeLine{00195\ \ \ \ \ \};} \DoxyCodeLine{00196\ \ \ \ \ } \DoxyCodeLine{00197\ \ \ \ \ \textcolor{keyword}{struct\ }\mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}} \DoxyCodeLine{00198\ \ \ \ \ \{} \DoxyCodeLine{00199\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00200\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ Parent;} \DoxyCodeLine{00201\ \ \ \ \ \ \ \ \ NodeList\ \ \ \ \ Nodes;} \DoxyCodeLine{00202\ } \DoxyCodeLine{00203\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}(\mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ parent);} \DoxyCodeLine{00204\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}\&\ other);} \DoxyCodeLine{00205\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{\string~GraphState}}();} \DoxyCodeLine{00206\ } \DoxyCodeLine{00207\ \ \ \ \ \ \ \ \ NodeId\ AddNode(\mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}}*\ node)\ \{\ \textcolor{keywordflow}{return}\ Nodes.insert(node);\ \}} \DoxyCodeLine{00208\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ RemoveNode(NodeId\ node)\ \{\ \textcolor{keywordflow}{if}(Nodes[node]-\/>Info.Flags\ \&\ NodeFlags\_Const)\ \textcolor{keywordflow}{return};\ Nodes.erase(node);\ \}} \DoxyCodeLine{00209\ } \DoxyCodeLine{00210\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}\&\ operator=(\textcolor{keyword}{const}\ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}\&\ other);} \DoxyCodeLine{00211\ \ \ \ \ \};} \DoxyCodeLine{00212\ } \DoxyCodeLine{00213\ \ \ \ \ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_open_shader_designer_1_1_shader_asset}{ShaderAsset}}\ :\ \textcolor{keyword}{public}\ \mbox{\hyperlink{class_open_shader_designer_1_1_file_manager_1_1_asset}{FileManager::Asset}}} \DoxyCodeLine{00214\ \ \ \ \ \{} \DoxyCodeLine{00215\ \ \ \ \ \textcolor{keyword}{public}:} \DoxyCodeLine{00216\ \ \ \ \ \ \ \ \ \textcolor{keyword}{inline}\ \textcolor{keyword}{static}\ \textcolor{keyword}{const}\ std::string\ VersionString\ =\ \textcolor{stringliteral}{"{}\#version\ 430\ core"{}};} \DoxyCodeLine{00217\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00218\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_asset}{ShaderAsset}}(\textcolor{keyword}{const}\ FileManager::Path\&\ path,\ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ graph)} \DoxyCodeLine{00219\ \ \ \ \ \ \ \ \ \ \ \ \ :\ Asset(path)} \DoxyCodeLine{00220\ \ \ \ \ \ \ \ \ \ \ \ \ ,\ State\_(graph)} \DoxyCodeLine{00221\ \ \ \ \ \ \ \ \ \{\ \}} \DoxyCodeLine{00222\ } \DoxyCodeLine{00223\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \ \ \ \ \ \ \ PushState()\ \ \ \ \ \ \ \ \ \ \ \ \{\ History\_.push(State\_);\ \}} \DoxyCodeLine{00224\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \ \ \ \ \ \ \ PopState()\ \ \ \ \ \ \ \ \ \ \ \ \ \{\ State\_\ =\ History\_.top();\ History\_.pop();\}} \DoxyCodeLine{00225\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00226\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}\&\ GetState()\ \ \ \ \ \ \ \ \ \ \ \ \ \{\ \textcolor{keywordflow}{return}\ State\_;\ \}} \DoxyCodeLine{00227\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}\&\ GetState()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ State\_;\ \}} \DoxyCodeLine{00228\ } \DoxyCodeLine{00229\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ GetGraph()\ \{\ \textcolor{keywordflow}{return}\ State\_.Parent;\ \}} \DoxyCodeLine{00230\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&\ GetGraph()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ State\_.Parent;\ \}} \DoxyCodeLine{00231\ } \DoxyCodeLine{00232\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ Compile()\ =\ 0;} \DoxyCodeLine{00233\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ View(HDRTexture::HandleType*\ Target)\ =\ 0;} \DoxyCodeLine{00234\ } \DoxyCodeLine{00235\ \ \ \ \ \textcolor{keyword}{protected}:} \DoxyCodeLine{00236\ \ \ \ \ \ \ \ \ std::string\ Code;} \DoxyCodeLine{00237\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00238\ } \DoxyCodeLine{00239\ \ \ \ \ \textcolor{keyword}{private}:} \DoxyCodeLine{00240\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_graph_state}{GraphState}}\ \ \ \ \ \ \ \ \ \ \ \ \ State\_;} \DoxyCodeLine{00241\ \ \ \ \ \ \ \ \ std::stack\ History\_;} \DoxyCodeLine{00242\ \ \ \ \ \};} \DoxyCodeLine{00243\ } \DoxyCodeLine{00244\ \ \ \ \ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}} \DoxyCodeLine{00245\ \ \ \ \ \ \ \ \ :\ \textcolor{keyword}{public}\ \mbox{\hyperlink{class_open_shader_designer_1_1_editor_window}{EditorWindow}}} \DoxyCodeLine{00246\ \ \ \ \ \{} \DoxyCodeLine{00247\ \ \ \ \ \textcolor{keyword}{private}:} \DoxyCodeLine{00248\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}};} \DoxyCodeLine{00249\ } \DoxyCodeLine{00250\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }ConstructorPtr\ =\ \mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}}*(*)(\mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}\&,\ ImVec2);} \DoxyCodeLine{00251\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }ContextMenuItem} \DoxyCodeLine{00252\ \ \ \ \ \ \ \ \ \{} \DoxyCodeLine{00253\ \ \ \ \ \ \ \ \ \ \ \ \ std::string\ \ \ \ Name;} \DoxyCodeLine{00254\ \ \ \ \ \ \ \ \ \ \ \ \ ConstructorPtr\ Constructor;} \DoxyCodeLine{00255\ \ \ \ \ \ \ \ \ \};} \DoxyCodeLine{00256\ } \DoxyCodeLine{00257\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }ContextMenuHierarchy\ =\ ocu::directed\_tree;} \DoxyCodeLine{00258\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }ContextID\ =\ ContextMenuHierarchy::node;} \DoxyCodeLine{00259\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00260\ \ \ \ \ \ \ \ \ \textcolor{keyword}{static}\ ContextMenuHierarchy\&\ ContextMenu()\ \{\ \textcolor{keyword}{static}\ ContextMenuHierarchy\ Menu\ \{\{\ \textcolor{stringliteral}{"{}"{}},\ \textcolor{keyword}{nullptr}\ \}\};\ \textcolor{keywordflow}{return}\ Menu;\ \}} \DoxyCodeLine{00261\ } \DoxyCodeLine{00262\ } \DoxyCodeLine{00263\ \ \ \ \ \textcolor{keyword}{public}:} \DoxyCodeLine{00264\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}();} \DoxyCodeLine{00265\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{\string~ShaderGraph}}();} \DoxyCodeLine{00266\ } \DoxyCodeLine{00267\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph_ab165317b9a0b95648df1e7009c220a04}{OnOpen}}()\ \textcolor{keyword}{override};} \DoxyCodeLine{00268\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph_aca7fbcf7c2f9b05c0f69c8d4b58eee27}{DrawMenu}}()\ \textcolor{keyword}{override};} \DoxyCodeLine{00269\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph_af028ed8ea55d12a1bb2bcf51c817398b}{DrawWindow}}()\ \textcolor{keyword}{override};} \DoxyCodeLine{00270\ } \DoxyCodeLine{00271\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ DrawContextMenu();} \DoxyCodeLine{00272\ } \DoxyCodeLine{00273\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ Copy();} \DoxyCodeLine{00274\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ Erase();} \DoxyCodeLine{00275\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ Paste(ImVec2\ pos);} \DoxyCodeLine{00276\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ Clear();} \DoxyCodeLine{00277\ } \DoxyCodeLine{00278\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}}*\ FindNode(ImPinPtr\ ptr);} \DoxyCodeLine{00279\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_node}{Node}}*\ FindNode(ImGuiID\ \textcolor{keywordtype}{id});} \DoxyCodeLine{00280\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{struct_open_shader_designer_1_1_pin}{Pin}}\&\ \ FindPin(ImPinPtr\ ptr);} \DoxyCodeLine{00281\ } \DoxyCodeLine{00282\ \ \ \ \ \ \ \ \ std::string\ GetValue(ImPinPtr\ ptr);} \DoxyCodeLine{00283\ } \DoxyCodeLine{00284\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ OpenShader(\mbox{\hyperlink{class_open_shader_designer_1_1_shader_asset}{ShaderAsset}}*\ asset)\ \{\ Shader\_\ =\ asset;\ \}} \DoxyCodeLine{00285\ } \DoxyCodeLine{00286\ \ \ \ \ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ Register(\textcolor{keyword}{const}\ std::filesystem::path\&\ path,\ ConstructorPtr\ constructor);} \DoxyCodeLine{00287\ } \DoxyCodeLine{00288\ \ \ \ \ \textcolor{keyword}{private}:} \DoxyCodeLine{00289\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ TODO:\ Make\ bitfield}} \DoxyCodeLine{00290\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ GrabFocus\_;} \DoxyCodeLine{00291\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_asset}{ShaderAsset}}*\ Shader\_;} \DoxyCodeLine{00292\ \ \ \ \ \ \ \ \ ImVec2\ ContextMenuPosition\_;} \DoxyCodeLine{00293\ \ \ \ \ \ \ \ \ ocu::optional\ Selected\_;} \DoxyCodeLine{00294\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00295\ \ \ \ \ \ \ \ \ } \DoxyCodeLine{00296\ } \DoxyCodeLine{00297\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_open_shader_designer_1_1_inspector}{Inspector}};} \DoxyCodeLine{00298\ \ \ \ \ \};} \DoxyCodeLine{00299\ } \DoxyCodeLine{00300\ \ \ \ \ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_open_shader_designer_1_1_inspector}{Inspector}}} \DoxyCodeLine{00301\ \ \ \ \ \ \ \ \ :\ \textcolor{keyword}{public}\ \mbox{\hyperlink{class_open_shader_designer_1_1_editor_window}{EditorWindow}}} \DoxyCodeLine{00302\ \ \ \ \ \{} \DoxyCodeLine{00303\ \ \ \ \ \textcolor{keyword}{public}:} \DoxyCodeLine{00304\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_inspector}{Inspector}}();} \DoxyCodeLine{00305\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \mbox{\hyperlink{class_open_shader_designer_1_1_inspector}{\string~Inspector}}()\ =\ \textcolor{keywordflow}{default};} \DoxyCodeLine{00306\ } \DoxyCodeLine{00307\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_open_shader_designer_1_1_inspector_a69fb8726df2442514a65dc29a9660c24}{DrawWindow}}()\ \textcolor{keyword}{override};} \DoxyCodeLine{00308\ } \DoxyCodeLine{00309\ \ \ \ \ \textcolor{keyword}{private}:} \DoxyCodeLine{00310\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}}*\ Graph;} \DoxyCodeLine{00311\ } \DoxyCodeLine{00312\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_open_shader_designer_1_1_shader_graph}{ShaderGraph}};} \DoxyCodeLine{00313\ \ \ \ \ \};} \DoxyCodeLine{00314\ \}} \DoxyCodeLine{00315\ } \DoxyCodeLine{00316\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ OSD\_SHADERGRAPH\_H}} \end{DoxyCode}