\hypertarget{a01159}{\section{A\+C\+G\+:\+:Scene\+Graph\+:\+:A\+C\+G\+:\+:Shader\+Generator Class Reference}
\label{a01159}\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
}
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{a00487}{Default\+I\+O\+Desc}
\item 
struct \hyperlink{a00757}{Keywords}
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01159_a466738631f6fdbeb129c0222df3bfa82}{void \hyperlink{a01159_a466738631f6fdbeb129c0222df3bfa82}{set\+G\+L\+S\+L\+Version} (int \+\_\+version)}\label{a01159_a466738631f6fdbeb129c0222df3bfa82}

\begin{DoxyCompactList}\small\item\em Set glsl version. \end{DoxyCompactList}\item 
\hypertarget{a01159_a6e92adcec0675bdc510f3604768ed9c8}{void \hyperlink{a01159_a6e92adcec0675bdc510f3604768ed9c8}{add\+Include\+File} (Q\+String \+\_\+file\+Name)}\label{a01159_a6e92adcec0675bdc510f3604768ed9c8}

\begin{DoxyCompactList}\small\item\em Imports another shader, same as \#include. \end{DoxyCompactList}\item 
\hypertarget{a01159_aab40e30bf0279372b3b53d2e0e57687a}{void \hyperlink{a01159_aab40e30bf0279372b3b53d2e0e57687a}{init\+Vertex\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_aab40e30bf0279372b3b53d2e0e57687a}

\begin{DoxyCompactList}\small\item\em Adds fitting vertex shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_a1e7a716218f12a3d41ade8579f81ec28}{void \hyperlink{a01159_a1e7a716218f12a3d41ade8579f81ec28}{init\+Tess\+Control\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_a1e7a716218f12a3d41ade8579f81ec28}

\begin{DoxyCompactList}\small\item\em Adds fitting tess-\/control shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_afb6d5c926a49d733703e85e054aadf75}{void \hyperlink{a01159_afb6d5c926a49d733703e85e054aadf75}{init\+Tess\+Eval\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_afb6d5c926a49d733703e85e054aadf75}

\begin{DoxyCompactList}\small\item\em Adds fitting tess-\/evaluation shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_ae14523fbaacf806e45695fda3b06abbb}{void \hyperlink{a01159_ae14523fbaacf806e45695fda3b06abbb}{init\+Geometry\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_ae14523fbaacf806e45695fda3b06abbb}

\begin{DoxyCompactList}\small\item\em Adds fitting geometry shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_a8b7ffc1b0c528e863e72e6cf049af033}{void \hyperlink{a01159_a8b7ffc1b0c528e863e72e6cf049af033}{init\+Fragment\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_a8b7ffc1b0c528e863e72e6cf049af033}

\begin{DoxyCompactList}\small\item\em Adds fitting fragment shader io for a given description. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ac4d32acc51399b8dfc3b4ab695598094}{init\+Default\+Uniforms} ()
\begin{DoxyCompactList}\small\item\em Adds frequently used uniform parameters. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a3fb6c16170ed52ebed14fc1503743fd4}{add\+Input} (const Q\+String \&\+\_\+input)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ab208eae0c7f3e09fae652f6dfab02da8}{add\+Input} (const Q\+String \&\+\_\+type, const Q\+String \&\+\_\+varname)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a158d5a5839bc0c87007cc08e4b34b529}{add\+Output} (const Q\+String \&\+\_\+output)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a6fb04188f4cb1e67fbf381c0330186c1}{add\+Output} (const Q\+String \&\+\_\+type, const Q\+String \&\+\_\+varname)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ad38077f8e16dfee29d6175dc7125315f}{add\+Uniform} (Q\+String \+\_\+uniform, Q\+String \+\_\+comment=\char`\"{}\char`\"{})
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} uniform specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a757839f69babb3a75ae374741166e0b7}{add\+Define} (const Q\+String \&\+\_\+define)
\begin{DoxyCompactList}\small\item\em Add one define. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ac77cbe612526ae7456ecc1ed3d512f68}{add\+I\+O\+Define} (const Q\+String \&\+\_\+macro\+Name, const Q\+String \&\+\_\+resolved\+Name)
\begin{DoxyCompactList}\small\item\em Assign an opaque name to the abstract macro. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a741549c46a6800fae02483b79aa50317}{add\+Macros} (const Q\+String\+List \&\+\_\+macros)
\begin{DoxyCompactList}\small\item\em Add a list of preprocessor macros. \end{DoxyCompactList}\item 
bool \hyperlink{a01159_ad3f89a615509fec4ca29d878b995117f}{has\+Define} (Q\+String \+\_\+define) const 
\begin{DoxyCompactList}\small\item\em Check for define. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a9e56c25690140b4d6443a6011136b2d2}{add\+Layout} (Q\+String \+\_\+layout)
\begin{DoxyCompactList}\small\item\em Add a layout directive. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a723c5edf2d8613f6d148e65e332ff84f}{add\+Raw\+I\+O\+Block} (Q\+String\+List \+\_\+code\+Block)
\begin{DoxyCompactList}\small\item\em Add a raw glsl I\+O code block. \end{DoxyCompactList}\item 
\hypertarget{a01159_a3d09378c8848f378623217719c720973}{void \hyperlink{a01159_a3d09378c8848f378623217719c720973}{add\+Light} (int light\+Index\+\_\+, Shader\+Gen\+Light\+Type \+\_\+light)}\label{a01159_a3d09378c8848f378623217719c720973}

\begin{DoxyCompactList}\small\item\em Add a light description to shader\+: \end{DoxyCompactList}\item 
void \hyperlink{a01159_a45ca8a4cd4a231b94656f82ab790b084}{build\+Shader\+Code} (Q\+String\+List $\ast$\+\_\+p\+Main\+Code, const Q\+String\+List \&\+\_\+default\+Lighting\+Functions)
\begin{DoxyCompactList}\small\item\em Shader assembly function. \end{DoxyCompactList}\item 
\hypertarget{a01159_a74b043840c97e13b70369887aeecd0c0}{const Q\+String\+List \& \hyperlink{a01159_a74b043840c97e13b70369887aeecd0c0}{get\+Shader\+Code} ()}\label{a01159_a74b043840c97e13b70369887aeecd0c0}

\begin{DoxyCompactList}\small\item\em Get result of build\+Shader\+Code. \end{DoxyCompactList}\item 
void \hyperlink{a01159_adaa6fe80d2d581cf8a945adfb6061289}{save\+To\+File} (const char $\ast$\+\_\+file\+Name)
\begin{DoxyCompactList}\small\item\em Save generated shader code to text file. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a640187072280e47f55de3dd825a6ede9}{match\+Inputs} (const \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+previous\+Shader\+Stage, bool \+\_\+pass\+To\+Next\+Stage, Q\+String \+\_\+input\+Prefix=\char`\"{}out\+Vertex\char`\"{}, Q\+String \+\_\+output\+Prefix=\char`\"{}out\+Geometry\char`\"{})
\begin{DoxyCompactList}\small\item\em Perform name matching of outputs and inputs between two shader stages. \end{DoxyCompactList}\item 
void \hyperlink{a01159_af4b8a768947dd221fdd35bd3fbf63d53}{define\+I\+O\+Abstraction} (const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc, bool \+\_\+vs, bool \+\_\+fs)
\begin{DoxyCompactList}\small\item\em Define abstract I\+O names via shader defines. \end{DoxyCompactList}\item 
\hypertarget{a01159_a5136b9c59a9534f5388b0a3bd2c21953}{int \hyperlink{a01159_a5136b9c59a9534f5388b0a3bd2c21953}{get\+Num\+Outputs} () const }\label{a01159_a5136b9c59a9534f5388b0a3bd2c21953}

\begin{DoxyCompactList}\small\item\em get number of outputs \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}{get\+Output\+Name} (int \+\_\+id) const 
\begin{DoxyCompactList}\small\item\em get variable name of output \end{DoxyCompactList}\item 
\hypertarget{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}{int \hyperlink{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}{get\+Num\+Inputs} () const }\label{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}

\begin{DoxyCompactList}\small\item\em get number of inputs \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_a1dfbe53393e3b0124d33e2565d71e4de}{get\+Input\+Name} (int \+\_\+id) const 
\begin{DoxyCompactList}\small\item\em get variable name of input \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_a98fdf3b73d46b19df440131faeeafc6d}{get\+I\+O\+Map\+Name} (int \+\_\+in\+Id) const 
\begin{DoxyCompactList}\small\item\em get corresponding output name of an input id \end{DoxyCompactList}\item 
\hypertarget{a01159_a466738631f6fdbeb129c0222df3bfa82}{void \hyperlink{a01159_a466738631f6fdbeb129c0222df3bfa82}{set\+G\+L\+S\+L\+Version} (int \+\_\+version)}\label{a01159_a466738631f6fdbeb129c0222df3bfa82}

\begin{DoxyCompactList}\small\item\em Set glsl version. \end{DoxyCompactList}\item 
\hypertarget{a01159_a6e92adcec0675bdc510f3604768ed9c8}{void \hyperlink{a01159_a6e92adcec0675bdc510f3604768ed9c8}{add\+Include\+File} (Q\+String \+\_\+file\+Name)}\label{a01159_a6e92adcec0675bdc510f3604768ed9c8}

\begin{DoxyCompactList}\small\item\em Imports another shader, same as \#include. \end{DoxyCompactList}\item 
\hypertarget{a01159_aab40e30bf0279372b3b53d2e0e57687a}{void \hyperlink{a01159_aab40e30bf0279372b3b53d2e0e57687a}{init\+Vertex\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_aab40e30bf0279372b3b53d2e0e57687a}

\begin{DoxyCompactList}\small\item\em Adds fitting vertex shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_a1e7a716218f12a3d41ade8579f81ec28}{void \hyperlink{a01159_a1e7a716218f12a3d41ade8579f81ec28}{init\+Tess\+Control\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_a1e7a716218f12a3d41ade8579f81ec28}

\begin{DoxyCompactList}\small\item\em Adds fitting tess-\/control shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_afb6d5c926a49d733703e85e054aadf75}{void \hyperlink{a01159_afb6d5c926a49d733703e85e054aadf75}{init\+Tess\+Eval\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_afb6d5c926a49d733703e85e054aadf75}

\begin{DoxyCompactList}\small\item\em Adds fitting tess-\/evaluation shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_ae14523fbaacf806e45695fda3b06abbb}{void \hyperlink{a01159_ae14523fbaacf806e45695fda3b06abbb}{init\+Geometry\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_ae14523fbaacf806e45695fda3b06abbb}

\begin{DoxyCompactList}\small\item\em Adds fitting geometry shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_a8b7ffc1b0c528e863e72e6cf049af033}{void \hyperlink{a01159_a8b7ffc1b0c528e863e72e6cf049af033}{init\+Fragment\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_a8b7ffc1b0c528e863e72e6cf049af033}

\begin{DoxyCompactList}\small\item\em Adds fitting fragment shader io for a given description. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ac4d32acc51399b8dfc3b4ab695598094}{init\+Default\+Uniforms} ()
\begin{DoxyCompactList}\small\item\em Adds frequently used uniform parameters. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a3fb6c16170ed52ebed14fc1503743fd4}{add\+Input} (const Q\+String \&\+\_\+input)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ab208eae0c7f3e09fae652f6dfab02da8}{add\+Input} (const Q\+String \&\+\_\+type, const Q\+String \&\+\_\+varname)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a158d5a5839bc0c87007cc08e4b34b529}{add\+Output} (const Q\+String \&\+\_\+output)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a6fb04188f4cb1e67fbf381c0330186c1}{add\+Output} (const Q\+String \&\+\_\+type, const Q\+String \&\+\_\+varname)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ad38077f8e16dfee29d6175dc7125315f}{add\+Uniform} (Q\+String \+\_\+uniform, Q\+String \+\_\+comment=\char`\"{}\char`\"{})
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} uniform specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a757839f69babb3a75ae374741166e0b7}{add\+Define} (const Q\+String \&\+\_\+define)
\begin{DoxyCompactList}\small\item\em Add one define. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ac77cbe612526ae7456ecc1ed3d512f68}{add\+I\+O\+Define} (const Q\+String \&\+\_\+macro\+Name, const Q\+String \&\+\_\+resolved\+Name)
\begin{DoxyCompactList}\small\item\em Assign an opaque name to the abstract macro. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a741549c46a6800fae02483b79aa50317}{add\+Macros} (const Q\+String\+List \&\+\_\+macros)
\begin{DoxyCompactList}\small\item\em Add a list of preprocessor macros. \end{DoxyCompactList}\item 
bool \hyperlink{a01159_ad3f89a615509fec4ca29d878b995117f}{has\+Define} (Q\+String \+\_\+define) const 
\begin{DoxyCompactList}\small\item\em Check for define. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a9e56c25690140b4d6443a6011136b2d2}{add\+Layout} (Q\+String \+\_\+layout)
\begin{DoxyCompactList}\small\item\em Add a layout directive. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a723c5edf2d8613f6d148e65e332ff84f}{add\+Raw\+I\+O\+Block} (Q\+String\+List \+\_\+code\+Block)
\begin{DoxyCompactList}\small\item\em Add a raw glsl I\+O code block. \end{DoxyCompactList}\item 
\hypertarget{a01159_a3d09378c8848f378623217719c720973}{void \hyperlink{a01159_a3d09378c8848f378623217719c720973}{add\+Light} (int light\+Index\+\_\+, Shader\+Gen\+Light\+Type \+\_\+light)}\label{a01159_a3d09378c8848f378623217719c720973}

\begin{DoxyCompactList}\small\item\em Add a light description to shader\+: \end{DoxyCompactList}\item 
void \hyperlink{a01159_a45ca8a4cd4a231b94656f82ab790b084}{build\+Shader\+Code} (Q\+String\+List $\ast$\+\_\+p\+Main\+Code, const Q\+String\+List \&\+\_\+default\+Lighting\+Functions)
\begin{DoxyCompactList}\small\item\em Shader assembly function. \end{DoxyCompactList}\item 
\hypertarget{a01159_a74b043840c97e13b70369887aeecd0c0}{const Q\+String\+List \& \hyperlink{a01159_a74b043840c97e13b70369887aeecd0c0}{get\+Shader\+Code} ()}\label{a01159_a74b043840c97e13b70369887aeecd0c0}

\begin{DoxyCompactList}\small\item\em Get result of build\+Shader\+Code. \end{DoxyCompactList}\item 
void \hyperlink{a01159_adaa6fe80d2d581cf8a945adfb6061289}{save\+To\+File} (const char $\ast$\+\_\+file\+Name)
\begin{DoxyCompactList}\small\item\em Save generated shader code to text file. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a640187072280e47f55de3dd825a6ede9}{match\+Inputs} (const \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+previous\+Shader\+Stage, bool \+\_\+pass\+To\+Next\+Stage, Q\+String \+\_\+input\+Prefix=\char`\"{}out\+Vertex\char`\"{}, Q\+String \+\_\+output\+Prefix=\char`\"{}out\+Geometry\char`\"{})
\begin{DoxyCompactList}\small\item\em Perform name matching of outputs and inputs between two shader stages. \end{DoxyCompactList}\item 
void \hyperlink{a01159_af4b8a768947dd221fdd35bd3fbf63d53}{define\+I\+O\+Abstraction} (const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc, bool \+\_\+vs, bool \+\_\+fs)
\begin{DoxyCompactList}\small\item\em Define abstract I\+O names via shader defines. \end{DoxyCompactList}\item 
\hypertarget{a01159_a5136b9c59a9534f5388b0a3bd2c21953}{int \hyperlink{a01159_a5136b9c59a9534f5388b0a3bd2c21953}{get\+Num\+Outputs} () const }\label{a01159_a5136b9c59a9534f5388b0a3bd2c21953}

\begin{DoxyCompactList}\small\item\em get number of outputs \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}{get\+Output\+Name} (int \+\_\+id) const 
\begin{DoxyCompactList}\small\item\em get variable name of output \end{DoxyCompactList}\item 
\hypertarget{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}{int \hyperlink{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}{get\+Num\+Inputs} () const }\label{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}

\begin{DoxyCompactList}\small\item\em get number of inputs \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_a1dfbe53393e3b0124d33e2565d71e4de}{get\+Input\+Name} (int \+\_\+id) const 
\begin{DoxyCompactList}\small\item\em get variable name of input \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_a98fdf3b73d46b19df440131faeeafc6d}{get\+I\+O\+Map\+Name} (int \+\_\+in\+Id) const 
\begin{DoxyCompactList}\small\item\em get corresponding output name of an input id \end{DoxyCompactList}\item 
\hypertarget{a01159_a466738631f6fdbeb129c0222df3bfa82}{void \hyperlink{a01159_a466738631f6fdbeb129c0222df3bfa82}{set\+G\+L\+S\+L\+Version} (int \+\_\+version)}\label{a01159_a466738631f6fdbeb129c0222df3bfa82}

\begin{DoxyCompactList}\small\item\em Set glsl version. \end{DoxyCompactList}\item 
\hypertarget{a01159_a6e92adcec0675bdc510f3604768ed9c8}{void \hyperlink{a01159_a6e92adcec0675bdc510f3604768ed9c8}{add\+Include\+File} (Q\+String \+\_\+file\+Name)}\label{a01159_a6e92adcec0675bdc510f3604768ed9c8}

\begin{DoxyCompactList}\small\item\em Imports another shader, same as \#include. \end{DoxyCompactList}\item 
\hypertarget{a01159_aab40e30bf0279372b3b53d2e0e57687a}{void \hyperlink{a01159_aab40e30bf0279372b3b53d2e0e57687a}{init\+Vertex\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_aab40e30bf0279372b3b53d2e0e57687a}

\begin{DoxyCompactList}\small\item\em Adds fitting vertex shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_a1e7a716218f12a3d41ade8579f81ec28}{void \hyperlink{a01159_a1e7a716218f12a3d41ade8579f81ec28}{init\+Tess\+Control\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_a1e7a716218f12a3d41ade8579f81ec28}

\begin{DoxyCompactList}\small\item\em Adds fitting tess-\/control shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_afb6d5c926a49d733703e85e054aadf75}{void \hyperlink{a01159_afb6d5c926a49d733703e85e054aadf75}{init\+Tess\+Eval\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_afb6d5c926a49d733703e85e054aadf75}

\begin{DoxyCompactList}\small\item\em Adds fitting tess-\/evaluation shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_ae14523fbaacf806e45695fda3b06abbb}{void \hyperlink{a01159_ae14523fbaacf806e45695fda3b06abbb}{init\+Geometry\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_ae14523fbaacf806e45695fda3b06abbb}

\begin{DoxyCompactList}\small\item\em Adds fitting geometry shader io for a given description. \end{DoxyCompactList}\item 
\hypertarget{a01159_a8b7ffc1b0c528e863e72e6cf049af033}{void \hyperlink{a01159_a8b7ffc1b0c528e863e72e6cf049af033}{init\+Fragment\+Shader\+I\+O} (const \hyperlink{a01157}{Shader\+Gen\+Desc} $\ast$\+\_\+desc, \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+prev\+Stage, const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc)}\label{a01159_a8b7ffc1b0c528e863e72e6cf049af033}

\begin{DoxyCompactList}\small\item\em Adds fitting fragment shader io for a given description. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ac4d32acc51399b8dfc3b4ab695598094}{init\+Default\+Uniforms} ()
\begin{DoxyCompactList}\small\item\em Adds frequently used uniform parameters. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a3fb6c16170ed52ebed14fc1503743fd4}{add\+Input} (const Q\+String \&\+\_\+input)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ab208eae0c7f3e09fae652f6dfab02da8}{add\+Input} (const Q\+String \&\+\_\+type, const Q\+String \&\+\_\+varname)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a158d5a5839bc0c87007cc08e4b34b529}{add\+Output} (const Q\+String \&\+\_\+output)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a6fb04188f4cb1e67fbf381c0330186c1}{add\+Output} (const Q\+String \&\+\_\+type, const Q\+String \&\+\_\+varname)
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ad38077f8e16dfee29d6175dc7125315f}{add\+Uniform} (Q\+String \+\_\+uniform, Q\+String \+\_\+comment=\char`\"{}\char`\"{})
\begin{DoxyCompactList}\small\item\em Add one \hyperlink{a03348}{G\+L\+S\+L} uniform specifier. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a757839f69babb3a75ae374741166e0b7}{add\+Define} (const Q\+String \&\+\_\+define)
\begin{DoxyCompactList}\small\item\em Add one define. \end{DoxyCompactList}\item 
void \hyperlink{a01159_ac77cbe612526ae7456ecc1ed3d512f68}{add\+I\+O\+Define} (const Q\+String \&\+\_\+macro\+Name, const Q\+String \&\+\_\+resolved\+Name)
\begin{DoxyCompactList}\small\item\em Assign an opaque name to the abstract macro. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a741549c46a6800fae02483b79aa50317}{add\+Macros} (const Q\+String\+List \&\+\_\+macros)
\begin{DoxyCompactList}\small\item\em Add a list of preprocessor macros. \end{DoxyCompactList}\item 
bool \hyperlink{a01159_ad3f89a615509fec4ca29d878b995117f}{has\+Define} (Q\+String \+\_\+define) const 
\begin{DoxyCompactList}\small\item\em Check for define. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a9e56c25690140b4d6443a6011136b2d2}{add\+Layout} (Q\+String \+\_\+layout)
\begin{DoxyCompactList}\small\item\em Add a layout directive. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a723c5edf2d8613f6d148e65e332ff84f}{add\+Raw\+I\+O\+Block} (Q\+String\+List \+\_\+code\+Block)
\begin{DoxyCompactList}\small\item\em Add a raw glsl I\+O code block. \end{DoxyCompactList}\item 
\hypertarget{a01159_a3d09378c8848f378623217719c720973}{void \hyperlink{a01159_a3d09378c8848f378623217719c720973}{add\+Light} (int light\+Index\+\_\+, Shader\+Gen\+Light\+Type \+\_\+light)}\label{a01159_a3d09378c8848f378623217719c720973}

\begin{DoxyCompactList}\small\item\em Add a light description to shader\+: \end{DoxyCompactList}\item 
void \hyperlink{a01159_a45ca8a4cd4a231b94656f82ab790b084}{build\+Shader\+Code} (Q\+String\+List $\ast$\+\_\+p\+Main\+Code, const Q\+String\+List \&\+\_\+default\+Lighting\+Functions)
\begin{DoxyCompactList}\small\item\em Shader assembly function. \end{DoxyCompactList}\item 
\hypertarget{a01159_a74b043840c97e13b70369887aeecd0c0}{const Q\+String\+List \& \hyperlink{a01159_a74b043840c97e13b70369887aeecd0c0}{get\+Shader\+Code} ()}\label{a01159_a74b043840c97e13b70369887aeecd0c0}

\begin{DoxyCompactList}\small\item\em Get result of build\+Shader\+Code. \end{DoxyCompactList}\item 
void \hyperlink{a01159_adaa6fe80d2d581cf8a945adfb6061289}{save\+To\+File} (const char $\ast$\+\_\+file\+Name)
\begin{DoxyCompactList}\small\item\em Save generated shader code to text file. \end{DoxyCompactList}\item 
void \hyperlink{a01159_a640187072280e47f55de3dd825a6ede9}{match\+Inputs} (const \hyperlink{a01159}{Shader\+Generator} $\ast$\+\_\+previous\+Shader\+Stage, bool \+\_\+pass\+To\+Next\+Stage, Q\+String \+\_\+input\+Prefix=\char`\"{}out\+Vertex\char`\"{}, Q\+String \+\_\+output\+Prefix=\char`\"{}out\+Geometry\char`\"{})
\begin{DoxyCompactList}\small\item\em Perform name matching of outputs and inputs between two shader stages. \end{DoxyCompactList}\item 
void \hyperlink{a01159_af4b8a768947dd221fdd35bd3fbf63d53}{define\+I\+O\+Abstraction} (const \hyperlink{a00487}{Default\+I\+O\+Desc} $\ast$\+\_\+iodesc, bool \+\_\+vs, bool \+\_\+fs)
\begin{DoxyCompactList}\small\item\em Define abstract I\+O names via shader defines. \end{DoxyCompactList}\item 
\hypertarget{a01159_a5136b9c59a9534f5388b0a3bd2c21953}{int \hyperlink{a01159_a5136b9c59a9534f5388b0a3bd2c21953}{get\+Num\+Outputs} () const }\label{a01159_a5136b9c59a9534f5388b0a3bd2c21953}

\begin{DoxyCompactList}\small\item\em get number of outputs \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}{get\+Output\+Name} (int \+\_\+id) const 
\begin{DoxyCompactList}\small\item\em get variable name of output \end{DoxyCompactList}\item 
\hypertarget{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}{int \hyperlink{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}{get\+Num\+Inputs} () const }\label{a01159_a72b2c4e0965fff48e47bee62b6dcdc00}

\begin{DoxyCompactList}\small\item\em get number of inputs \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_a1dfbe53393e3b0124d33e2565d71e4de}{get\+Input\+Name} (int \+\_\+id) const 
\begin{DoxyCompactList}\small\item\em get variable name of input \end{DoxyCompactList}\item 
Q\+String \hyperlink{a01159_a98fdf3b73d46b19df440131faeeafc6d}{get\+I\+O\+Map\+Name} (int \+\_\+in\+Id) const 
\begin{DoxyCompactList}\small\item\em get corresponding output name of an input id \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Static Public Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01159_acd89f93e3ce05121ddd49cf2c1755847}{static const \hyperlink{a00757}{Keywords} {\bfseries keywords}}\label{a01159_acd89f93e3ce05121ddd49cf2c1755847}

\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
void \hyperlink{a01159_a620147dec57f93fccb49d45ecd090849}{add\+String\+To\+List} (Q\+String \+\_\+str, Q\+String\+List $\ast$\+\_\+list, Q\+String \+\_\+prefix=\char`\"{}\char`\"{}, Q\+String \+\_\+postfix=\char`\"{}\char`\"{})
\item 
void \hyperlink{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}{add\+I\+O\+To\+Code} (const Q\+String\+List \&\+\_\+cmds)
\item 
void \hyperlink{a01159_a620147dec57f93fccb49d45ecd090849}{add\+String\+To\+List} (Q\+String \+\_\+str, Q\+String\+List $\ast$\+\_\+list, Q\+String \+\_\+prefix=\char`\"{}\char`\"{}, Q\+String \+\_\+postfix=\char`\"{}\char`\"{})
\item 
void \hyperlink{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}{add\+I\+O\+To\+Code} (const Q\+String\+List \&\+\_\+cmds)
\item 
void \hyperlink{a01159_a620147dec57f93fccb49d45ecd090849}{add\+String\+To\+List} (Q\+String \+\_\+str, Q\+String\+List $\ast$\+\_\+list, Q\+String \+\_\+prefix=\char`\"{}\char`\"{}, Q\+String \+\_\+postfix=\char`\"{}\char`\"{})
\item 
void \hyperlink{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}{add\+I\+O\+To\+Code} (const Q\+String\+List \&\+\_\+cmds)
\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01159_a7d3edc155c3dedb1414be80061f49b52}{Q\+String\+List {\bfseries code\+\_\+}}\label{a01159_a7d3edc155c3dedb1414be80061f49b52}

\item 
\hypertarget{a01159_ac07fae6919e442a27c64e0acffaf71a3}{Q\+String\+List \hyperlink{a01159_ac07fae6919e442a27c64e0acffaf71a3}{imports\+\_\+}}\label{a01159_ac07fae6919e442a27c64e0acffaf71a3}

\begin{DoxyCompactList}\small\item\em glsl code imports (with \#include ) \end{DoxyCompactList}\item 
\hypertarget{a01159_af58cfebd0167dfa721aee8f5683b8745}{int {\bfseries version\+\_\+}}\label{a01159_af58cfebd0167dfa721aee8f5683b8745}

\item 
\hypertarget{a01159_ac825acc1d752a111aabf3cd75622d17d}{Q\+String\+List {\bfseries inputs\+\_\+}}\label{a01159_ac825acc1d752a111aabf3cd75622d17d}

\item 
\hypertarget{a01159_abe3ca70599b482153dc268ac49550690}{Q\+String\+List {\bfseries outputs\+\_\+}}\label{a01159_abe3ca70599b482153dc268ac49550690}

\item 
\hypertarget{a01159_a574e7f868748d4885be6b7871f7e34fa}{Q\+String\+List {\bfseries uniforms\+\_\+}}\label{a01159_a574e7f868748d4885be6b7871f7e34fa}

\item 
\hypertarget{a01159_a509d289e6732b803b3d18aa0049a2adf}{Q\+String\+List {\bfseries gen\+Defines\+\_\+}}\label{a01159_a509d289e6732b803b3d18aa0049a2adf}

\item 
\hypertarget{a01159_aaf76de0ca1079ccf261d6025e49d27dc}{Q\+String\+List {\bfseries layouts\+\_\+}}\label{a01159_aaf76de0ca1079ccf261d6025e49d27dc}

\item 
\hypertarget{a01159_a6729999adfccfd80b5d5f17739104389}{Q\+String\+List \hyperlink{a01159_a6729999adfccfd80b5d5f17739104389}{raw\+I\+O\+\_\+}}\label{a01159_a6729999adfccfd80b5d5f17739104389}

\begin{DoxyCompactList}\small\item\em io block as glsl code \end{DoxyCompactList}\item 
\hypertarget{a01159_ade9afa86b17e0012abdc3cfd11d85f55}{bool \hyperlink{a01159_ade9afa86b17e0012abdc3cfd11d85f55}{input\+Arrays\+\_\+}}\label{a01159_ade9afa86b17e0012abdc3cfd11d85f55}

\begin{DoxyCompactList}\small\item\em inputs of shader are arrays (tess-\/control, tess-\/eval, geometry) \end{DoxyCompactList}\item 
\hypertarget{a01159_a15439a188faebd7594fe34de719bb712}{bool \hyperlink{a01159_a15439a188faebd7594fe34de719bb712}{output\+Arrays\+\_\+}}\label{a01159_a15439a188faebd7594fe34de719bb712}

\begin{DoxyCompactList}\small\item\em outputs of shader are arrays (tess-\/control) \end{DoxyCompactList}\item 
\hypertarget{a01159_a11a0bc9d0414915d03a8164bd3d18a4d}{Q\+String \hyperlink{a01159_a11a0bc9d0414915d03a8164bd3d18a4d}{input\+Prefix\+\_\+}}\label{a01159_a11a0bc9d0414915d03a8164bd3d18a4d}

\begin{DoxyCompactList}\small\item\em prefix of inputs to this shader, same as prefix of ouputs of previous stage \end{DoxyCompactList}\item 
\hypertarget{a01159_a6101cba1013e9c517b8e79659d73e650}{Q\+String \hyperlink{a01159_a6101cba1013e9c517b8e79659d73e650}{output\+Prefix\+\_\+}}\label{a01159_a6101cba1013e9c517b8e79659d73e650}

\begin{DoxyCompactList}\small\item\em prefix of outputs of this shader \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
The \hyperlink{a01159}{Shader\+Generator} is used to collect shader io, uniforms, defines and includes.

The shader main-\/function is not generated here and must be provided as a parameter to the build\+Shader\+Code function. 

Definition at line 518 of file Mesh\+Node2\+T.\+cc.



\subsection{Member Function Documentation}
\hypertarget{a01159_a757839f69babb3a75ae374741166e0b7}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Define@{add\+Define}}
\index{add\+Define@{add\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Define}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Define (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+define}
\end{DoxyParamCaption}
)}}\label{a01159_a757839f69babb3a75ae374741166e0b7}


Add one define. 

Example\+: 
\begin{DoxyCode}
\textcolor{preprocessor}{#define SG\_GOURAUD 1}
\end{DoxyCode}
 \hypertarget{a01159_a757839f69babb3a75ae374741166e0b7}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Define@{add\+Define}}
\index{add\+Define@{add\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Define}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Define (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+define}
\end{DoxyParamCaption}
)}}\label{a01159_a757839f69babb3a75ae374741166e0b7}


Add one define. 

Example\+: 
\begin{DoxyCode}
\textcolor{preprocessor}{#define SG\_GOURAUD 1}
\end{DoxyCode}
 \hypertarget{a01159_a757839f69babb3a75ae374741166e0b7}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Define@{add\+Define}}
\index{add\+Define@{add\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Define}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Define (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+define}
\end{DoxyParamCaption}
)}}\label{a01159_a757839f69babb3a75ae374741166e0b7}


Add one define. 

Example\+: 
\begin{DoxyCode}
\textcolor{preprocessor}{#define SG\_GOURAUD 1}
\end{DoxyCode}
 \hypertarget{a01159_a3fb6c16170ed52ebed14fc1503743fd4}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Input@{add\+Input}}
\index{add\+Input@{add\+Input}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Input}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Input (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+input}
\end{DoxyParamCaption}
)}}\label{a01159_a3fb6c16170ed52ebed14fc1503743fd4}


Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
in vec4 inPosition;
\end{DoxyCode}
 \hypertarget{a01159_a3fb6c16170ed52ebed14fc1503743fd4}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Input@{add\+Input}}
\index{add\+Input@{add\+Input}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Input}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Input (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+input}
\end{DoxyParamCaption}
)}}\label{a01159_a3fb6c16170ed52ebed14fc1503743fd4}


Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
in vec4 inPosition;
\end{DoxyCode}
 \hypertarget{a01159_a3fb6c16170ed52ebed14fc1503743fd4}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Input@{add\+Input}}
\index{add\+Input@{add\+Input}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Input}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Input (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+input}
\end{DoxyParamCaption}
)}}\label{a01159_a3fb6c16170ed52ebed14fc1503743fd4}


Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
in vec4 inPosition;
\end{DoxyCode}
 \hypertarget{a01159_ab208eae0c7f3e09fae652f6dfab02da8}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Input@{add\+Input}}
\index{add\+Input@{add\+Input}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Input}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Input (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+type, }
\item[{const Q\+String \&}]{\+\_\+varname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_ab208eae0c7f3e09fae652f6dfab02da8}


Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
in vec4 inPosition;
\end{DoxyCode}
 

Definition at line 600 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_ab208eae0c7f3e09fae652f6dfab02da8}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Input@{add\+Input}}
\index{add\+Input@{add\+Input}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Input}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Input (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+type, }
\item[{const Q\+String \&}]{\+\_\+varname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_ab208eae0c7f3e09fae652f6dfab02da8}


Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
in vec4 inPosition;
\end{DoxyCode}
 

Definition at line 600 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_ab208eae0c7f3e09fae652f6dfab02da8}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Input@{add\+Input}}
\index{add\+Input@{add\+Input}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Input}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Input (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+type, }
\item[{const Q\+String \&}]{\+\_\+varname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_ab208eae0c7f3e09fae652f6dfab02da8}


Add one \hyperlink{a03348}{G\+L\+S\+L} input specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
in vec4 inPosition;
\end{DoxyCode}
 

Definition at line 600 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_ac77cbe612526ae7456ecc1ed3d512f68}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+I\+O\+Define@{add\+I\+O\+Define}}
\index{add\+I\+O\+Define@{add\+I\+O\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+I\+O\+Define}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+I\+O\+Define (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+macro\+Name, }
\item[{const Q\+String \&}]{\+\_\+resolved\+Name}
\end{DoxyParamCaption}
)}}\label{a01159_ac77cbe612526ae7456ecc1ed3d512f68}


Assign an opaque name to the abstract macro. 

\hypertarget{a01159_ac77cbe612526ae7456ecc1ed3d512f68}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+I\+O\+Define@{add\+I\+O\+Define}}
\index{add\+I\+O\+Define@{add\+I\+O\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+I\+O\+Define}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+I\+O\+Define (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+macro\+Name, }
\item[{const Q\+String \&}]{\+\_\+resolved\+Name}
\end{DoxyParamCaption}
)}}\label{a01159_ac77cbe612526ae7456ecc1ed3d512f68}


Assign an opaque name to the abstract macro. 

\hypertarget{a01159_ac77cbe612526ae7456ecc1ed3d512f68}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+I\+O\+Define@{add\+I\+O\+Define}}
\index{add\+I\+O\+Define@{add\+I\+O\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+I\+O\+Define}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+I\+O\+Define (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+macro\+Name, }
\item[{const Q\+String \&}]{\+\_\+resolved\+Name}
\end{DoxyParamCaption}
)}}\label{a01159_ac77cbe612526ae7456ecc1ed3d512f68}


Assign an opaque name to the abstract macro. 

\hypertarget{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+I\+O\+To\+Code@{add\+I\+O\+To\+Code}}
\index{add\+I\+O\+To\+Code@{add\+I\+O\+To\+Code}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+I\+O\+To\+Code}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+I\+O\+To\+Code (
\begin{DoxyParamCaption}
\item[{const Q\+String\+List \&}]{\+\_\+cmds}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}
Adds command lines to the shader code. Eventually appends missing ';' \hypertarget{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+I\+O\+To\+Code@{add\+I\+O\+To\+Code}}
\index{add\+I\+O\+To\+Code@{add\+I\+O\+To\+Code}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+I\+O\+To\+Code}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+I\+O\+To\+Code (
\begin{DoxyParamCaption}
\item[{const Q\+String\+List \&}]{\+\_\+cmds}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}
Adds command lines to the shader code. Eventually appends missing ';' \hypertarget{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+I\+O\+To\+Code@{add\+I\+O\+To\+Code}}
\index{add\+I\+O\+To\+Code@{add\+I\+O\+To\+Code}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+I\+O\+To\+Code}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+I\+O\+To\+Code (
\begin{DoxyParamCaption}
\item[{const Q\+String\+List \&}]{\+\_\+cmds}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01159_a05c6cb496e5290c5538e6d2f1e690ec8}
Adds command lines to the shader code. Eventually appends missing ';' \hypertarget{a01159_a9e56c25690140b4d6443a6011136b2d2}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Layout@{add\+Layout}}
\index{add\+Layout@{add\+Layout}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Layout}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Layout (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+layout}
\end{DoxyParamCaption}
)}}\label{a01159_a9e56c25690140b4d6443a6011136b2d2}


Add a layout directive. 

Example\+: 
\begin{DoxyCode}
layout(vertices = 3) out;
\end{DoxyCode}
 \hypertarget{a01159_a9e56c25690140b4d6443a6011136b2d2}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Layout@{add\+Layout}}
\index{add\+Layout@{add\+Layout}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Layout}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Layout (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+layout}
\end{DoxyParamCaption}
)}}\label{a01159_a9e56c25690140b4d6443a6011136b2d2}


Add a layout directive. 

Example\+: 
\begin{DoxyCode}
layout(vertices = 3) out;
\end{DoxyCode}
 \hypertarget{a01159_a9e56c25690140b4d6443a6011136b2d2}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Layout@{add\+Layout}}
\index{add\+Layout@{add\+Layout}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Layout}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Layout (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+layout}
\end{DoxyParamCaption}
)}}\label{a01159_a9e56c25690140b4d6443a6011136b2d2}


Add a layout directive. 

Example\+: 
\begin{DoxyCode}
layout(vertices = 3) out;
\end{DoxyCode}
 \hypertarget{a01159_a741549c46a6800fae02483b79aa50317}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Macros@{add\+Macros}}
\index{add\+Macros@{add\+Macros}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Macros}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Macros (
\begin{DoxyParamCaption}
\item[{const Q\+String\+List \&}]{\+\_\+macros}
\end{DoxyParamCaption}
)}}\label{a01159_a741549c46a6800fae02483b79aa50317}


Add a list of preprocessor macros. 

\hypertarget{a01159_a741549c46a6800fae02483b79aa50317}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Macros@{add\+Macros}}
\index{add\+Macros@{add\+Macros}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Macros}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Macros (
\begin{DoxyParamCaption}
\item[{const Q\+String\+List \&}]{\+\_\+macros}
\end{DoxyParamCaption}
)}}\label{a01159_a741549c46a6800fae02483b79aa50317}


Add a list of preprocessor macros. 

\hypertarget{a01159_a741549c46a6800fae02483b79aa50317}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Macros@{add\+Macros}}
\index{add\+Macros@{add\+Macros}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Macros}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Macros (
\begin{DoxyParamCaption}
\item[{const Q\+String\+List \&}]{\+\_\+macros}
\end{DoxyParamCaption}
)}}\label{a01159_a741549c46a6800fae02483b79aa50317}


Add a list of preprocessor macros. 

\hypertarget{a01159_a158d5a5839bc0c87007cc08e4b34b529}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Output@{add\+Output}}
\index{add\+Output@{add\+Output}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Output}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Output (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+output}
\end{DoxyParamCaption}
)}}\label{a01159_a158d5a5839bc0c87007cc08e4b34b529}


Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
out vec4 inPosition;
\end{DoxyCode}
 \hypertarget{a01159_a158d5a5839bc0c87007cc08e4b34b529}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Output@{add\+Output}}
\index{add\+Output@{add\+Output}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Output}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Output (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+output}
\end{DoxyParamCaption}
)}}\label{a01159_a158d5a5839bc0c87007cc08e4b34b529}


Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
out vec4 inPosition;
\end{DoxyCode}
 \hypertarget{a01159_a158d5a5839bc0c87007cc08e4b34b529}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Output@{add\+Output}}
\index{add\+Output@{add\+Output}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Output}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Output (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+output}
\end{DoxyParamCaption}
)}}\label{a01159_a158d5a5839bc0c87007cc08e4b34b529}


Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
out vec4 inPosition;
\end{DoxyCode}
 \hypertarget{a01159_a6fb04188f4cb1e67fbf381c0330186c1}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Output@{add\+Output}}
\index{add\+Output@{add\+Output}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Output}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Output (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+type, }
\item[{const Q\+String \&}]{\+\_\+varname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_a6fb04188f4cb1e67fbf381c0330186c1}


Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
out vec4 inPosition;
\end{DoxyCode}
 

Definition at line 620 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_a6fb04188f4cb1e67fbf381c0330186c1}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Output@{add\+Output}}
\index{add\+Output@{add\+Output}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Output}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Output (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+type, }
\item[{const Q\+String \&}]{\+\_\+varname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_a6fb04188f4cb1e67fbf381c0330186c1}


Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
out vec4 inPosition;
\end{DoxyCode}
 

Definition at line 620 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_a6fb04188f4cb1e67fbf381c0330186c1}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Output@{add\+Output}}
\index{add\+Output@{add\+Output}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Output}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Output (
\begin{DoxyParamCaption}
\item[{const Q\+String \&}]{\+\_\+type, }
\item[{const Q\+String \&}]{\+\_\+varname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_a6fb04188f4cb1e67fbf381c0330186c1}


Add one \hyperlink{a03348}{G\+L\+S\+L} output specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
out vec4 inPosition;
\end{DoxyCode}
 

Definition at line 620 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_a723c5edf2d8613f6d148e65e332ff84f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Raw\+I\+O\+Block@{add\+Raw\+I\+O\+Block}}
\index{add\+Raw\+I\+O\+Block@{add\+Raw\+I\+O\+Block}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Raw\+I\+O\+Block}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Raw\+I\+O\+Block (
\begin{DoxyParamCaption}
\item[{Q\+String\+List}]{\+\_\+code\+Block}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_a723c5edf2d8613f6d148e65e332ff84f}


Add a raw glsl I\+O code block. 

This code block is inserted between the generated I\+O block and the main function.

Example\+: 
\begin{DoxyCode}
in vec3 someInput; 
out vec3 outSomeOutput;
uniform vec3 paramA;
\textcolor{preprocessor}{#define USE\_METHOD\_X}
\textcolor{preprocessor}{#include "imports.h"}
..
\end{DoxyCode}
 

Definition at line 685 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_a723c5edf2d8613f6d148e65e332ff84f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Raw\+I\+O\+Block@{add\+Raw\+I\+O\+Block}}
\index{add\+Raw\+I\+O\+Block@{add\+Raw\+I\+O\+Block}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Raw\+I\+O\+Block}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Raw\+I\+O\+Block (
\begin{DoxyParamCaption}
\item[{Q\+String\+List}]{\+\_\+code\+Block}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_a723c5edf2d8613f6d148e65e332ff84f}


Add a raw glsl I\+O code block. 

This code block is inserted between the generated I\+O block and the main function.

Example\+: 
\begin{DoxyCode}
in vec3 someInput; 
out vec3 outSomeOutput;
uniform vec3 paramA;
\textcolor{preprocessor}{#define USE\_METHOD\_X}
\textcolor{preprocessor}{#include "imports.h"}
..
\end{DoxyCode}
 

Definition at line 685 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_a723c5edf2d8613f6d148e65e332ff84f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Raw\+I\+O\+Block@{add\+Raw\+I\+O\+Block}}
\index{add\+Raw\+I\+O\+Block@{add\+Raw\+I\+O\+Block}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Raw\+I\+O\+Block}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Raw\+I\+O\+Block (
\begin{DoxyParamCaption}
\item[{Q\+String\+List}]{\+\_\+code\+Block}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01159_a723c5edf2d8613f6d148e65e332ff84f}


Add a raw glsl I\+O code block. 

This code block is inserted between the generated I\+O block and the main function.

Example\+: 
\begin{DoxyCode}
in vec3 someInput; 
out vec3 outSomeOutput;
uniform vec3 paramA;
\textcolor{preprocessor}{#define USE\_METHOD\_X}
\textcolor{preprocessor}{#include "imports.h"}
..
\end{DoxyCode}
 

Definition at line 685 of file Mesh\+Node2\+T.\+cc.

\hypertarget{a01159_a620147dec57f93fccb49d45ecd090849}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+String\+To\+List@{add\+String\+To\+List}}
\index{add\+String\+To\+List@{add\+String\+To\+List}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+String\+To\+List}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+String\+To\+List (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+str, }
\item[{Q\+String\+List $\ast$}]{\+\_\+list, }
\item[{Q\+String}]{\+\_\+prefix = {\ttfamily \char`\"{}\char`\"{}}, }
\item[{Q\+String}]{\+\_\+postfix = {\ttfamily \char`\"{}\char`\"{}}}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01159_a620147dec57f93fccb49d45ecd090849}
aborts if string already present prefix, postfix functionality is very basic\+: only checks for occurrence and disregards location \hypertarget{a01159_a620147dec57f93fccb49d45ecd090849}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+String\+To\+List@{add\+String\+To\+List}}
\index{add\+String\+To\+List@{add\+String\+To\+List}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+String\+To\+List}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+String\+To\+List (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+str, }
\item[{Q\+String\+List $\ast$}]{\+\_\+list, }
\item[{Q\+String}]{\+\_\+prefix = {\ttfamily \char`\"{}\char`\"{}}, }
\item[{Q\+String}]{\+\_\+postfix = {\ttfamily \char`\"{}\char`\"{}}}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01159_a620147dec57f93fccb49d45ecd090849}
aborts if string already present prefix, postfix functionality is very basic\+: only checks for occurrence and disregards location \hypertarget{a01159_a620147dec57f93fccb49d45ecd090849}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+String\+To\+List@{add\+String\+To\+List}}
\index{add\+String\+To\+List@{add\+String\+To\+List}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+String\+To\+List}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+String\+To\+List (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+str, }
\item[{Q\+String\+List $\ast$}]{\+\_\+list, }
\item[{Q\+String}]{\+\_\+prefix = {\ttfamily \char`\"{}\char`\"{}}, }
\item[{Q\+String}]{\+\_\+postfix = {\ttfamily \char`\"{}\char`\"{}}}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01159_a620147dec57f93fccb49d45ecd090849}
aborts if string already present prefix, postfix functionality is very basic\+: only checks for occurrence and disregards location \hypertarget{a01159_ad38077f8e16dfee29d6175dc7125315f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Uniform@{add\+Uniform}}
\index{add\+Uniform@{add\+Uniform}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Uniform}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Uniform (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+uniform, }
\item[{Q\+String}]{\+\_\+comment = {\ttfamily \char`\"{}\char`\"{}}}
\end{DoxyParamCaption}
)}}\label{a01159_ad38077f8e16dfee29d6175dc7125315f}


Add one \hyperlink{a03348}{G\+L\+S\+L} uniform specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
uniform sampler2D sampAmbient;
\end{DoxyCode}
 \hypertarget{a01159_ad38077f8e16dfee29d6175dc7125315f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Uniform@{add\+Uniform}}
\index{add\+Uniform@{add\+Uniform}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Uniform}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Uniform (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+uniform, }
\item[{Q\+String}]{\+\_\+comment = {\ttfamily \char`\"{}\char`\"{}}}
\end{DoxyParamCaption}
)}}\label{a01159_ad38077f8e16dfee29d6175dc7125315f}


Add one \hyperlink{a03348}{G\+L\+S\+L} uniform specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
uniform sampler2D sampAmbient;
\end{DoxyCode}
 \hypertarget{a01159_ad38077f8e16dfee29d6175dc7125315f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!add\+Uniform@{add\+Uniform}}
\index{add\+Uniform@{add\+Uniform}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{add\+Uniform}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::add\+Uniform (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+uniform, }
\item[{Q\+String}]{\+\_\+comment = {\ttfamily \char`\"{}\char`\"{}}}
\end{DoxyParamCaption}
)}}\label{a01159_ad38077f8e16dfee29d6175dc7125315f}


Add one \hyperlink{a03348}{G\+L\+S\+L} uniform specifier. 

Stores string pointer only Example\+: 
\begin{DoxyCode}
uniform sampler2D sampAmbient;
\end{DoxyCode}
 \hypertarget{a01159_a45ca8a4cd4a231b94656f82ab790b084}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!build\+Shader\+Code@{build\+Shader\+Code}}
\index{build\+Shader\+Code@{build\+Shader\+Code}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{build\+Shader\+Code}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::build\+Shader\+Code (
\begin{DoxyParamCaption}
\item[{Q\+String\+List $\ast$}]{\+\_\+p\+Main\+Code, }
\item[{const Q\+String\+List \&}]{\+\_\+default\+Lighting\+Functions}
\end{DoxyParamCaption}
)}}\label{a01159_a45ca8a4cd4a231b94656f82ab790b084}


Shader assembly function. 

Also scans shader code for references to default lighting functions Lit\+Point\+Light(), Lit\+Dir\+Light(), Lit\+Spot\+Light() and eventually adds these to the shader. \hypertarget{a01159_a45ca8a4cd4a231b94656f82ab790b084}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!build\+Shader\+Code@{build\+Shader\+Code}}
\index{build\+Shader\+Code@{build\+Shader\+Code}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{build\+Shader\+Code}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::build\+Shader\+Code (
\begin{DoxyParamCaption}
\item[{Q\+String\+List $\ast$}]{\+\_\+p\+Main\+Code, }
\item[{const Q\+String\+List \&}]{\+\_\+default\+Lighting\+Functions}
\end{DoxyParamCaption}
)}}\label{a01159_a45ca8a4cd4a231b94656f82ab790b084}


Shader assembly function. 

Also scans shader code for references to default lighting functions Lit\+Point\+Light(), Lit\+Dir\+Light(), Lit\+Spot\+Light() and eventually adds these to the shader. \hypertarget{a01159_a45ca8a4cd4a231b94656f82ab790b084}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!build\+Shader\+Code@{build\+Shader\+Code}}
\index{build\+Shader\+Code@{build\+Shader\+Code}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{build\+Shader\+Code}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::build\+Shader\+Code (
\begin{DoxyParamCaption}
\item[{Q\+String\+List $\ast$}]{\+\_\+p\+Main\+Code, }
\item[{const Q\+String\+List \&}]{\+\_\+default\+Lighting\+Functions}
\end{DoxyParamCaption}
)}}\label{a01159_a45ca8a4cd4a231b94656f82ab790b084}


Shader assembly function. 

Also scans shader code for references to default lighting functions Lit\+Point\+Light(), Lit\+Dir\+Light(), Lit\+Spot\+Light() and eventually adds these to the shader. \hypertarget{a01159_af4b8a768947dd221fdd35bd3fbf63d53}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!define\+I\+O\+Abstraction@{define\+I\+O\+Abstraction}}
\index{define\+I\+O\+Abstraction@{define\+I\+O\+Abstraction}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{define\+I\+O\+Abstraction}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::define\+I\+O\+Abstraction (
\begin{DoxyParamCaption}
\item[{const {\bf Default\+I\+O\+Desc} $\ast$}]{\+\_\+iodesc, }
\item[{bool}]{\+\_\+vs, }
\item[{bool}]{\+\_\+fs}
\end{DoxyParamCaption}
)}}\label{a01159_af4b8a768947dd221fdd35bd3fbf63d53}


Define abstract I\+O names via shader defines. 

Default shader inputs and outputs can be conveniently accessed via S\+G\+\_\+\+I\+N\+P\+U\+T\+\_\+\+X and S\+G\+\_\+\+O\+U\+T\+P\+U\+T\+\_\+\+X defines without having to worry about the combinatoric problem of shader stages. For example, in a fragment-\/shader view-\/space normals can always be accessed via S\+G\+\_\+\+I\+N\+P\+U\+T\+\_\+\+N\+O\+R\+M\+A\+L\+V\+S, regardless whether there is a geometry shader or not.


\begin{DoxyParams}{Parameters}
{\em \+\_\+iodesc} & shader I\+O descriptor \\
\hline
{\em \+\_\+vs} & I\+O abstraction for vertex shader \\
\hline
{\em \+\_\+fs} & I\+O abstraction for fragment shader \\
\hline
\end{DoxyParams}
\hypertarget{a01159_af4b8a768947dd221fdd35bd3fbf63d53}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!define\+I\+O\+Abstraction@{define\+I\+O\+Abstraction}}
\index{define\+I\+O\+Abstraction@{define\+I\+O\+Abstraction}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{define\+I\+O\+Abstraction}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::define\+I\+O\+Abstraction (
\begin{DoxyParamCaption}
\item[{const {\bf Default\+I\+O\+Desc} $\ast$}]{\+\_\+iodesc, }
\item[{bool}]{\+\_\+vs, }
\item[{bool}]{\+\_\+fs}
\end{DoxyParamCaption}
)}}\label{a01159_af4b8a768947dd221fdd35bd3fbf63d53}


Define abstract I\+O names via shader defines. 

Default shader inputs and outputs can be conveniently accessed via S\+G\+\_\+\+I\+N\+P\+U\+T\+\_\+\+X and S\+G\+\_\+\+O\+U\+T\+P\+U\+T\+\_\+\+X defines without having to worry about the combinatoric problem of shader stages. For example, in a fragment-\/shader view-\/space normals can always be accessed via S\+G\+\_\+\+I\+N\+P\+U\+T\+\_\+\+N\+O\+R\+M\+A\+L\+V\+S, regardless whether there is a geometry shader or not.


\begin{DoxyParams}{Parameters}
{\em \+\_\+iodesc} & shader I\+O descriptor \\
\hline
{\em \+\_\+vs} & I\+O abstraction for vertex shader \\
\hline
{\em \+\_\+fs} & I\+O abstraction for fragment shader \\
\hline
\end{DoxyParams}
\hypertarget{a01159_af4b8a768947dd221fdd35bd3fbf63d53}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!define\+I\+O\+Abstraction@{define\+I\+O\+Abstraction}}
\index{define\+I\+O\+Abstraction@{define\+I\+O\+Abstraction}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{define\+I\+O\+Abstraction}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::define\+I\+O\+Abstraction (
\begin{DoxyParamCaption}
\item[{const {\bf Default\+I\+O\+Desc} $\ast$}]{\+\_\+iodesc, }
\item[{bool}]{\+\_\+vs, }
\item[{bool}]{\+\_\+fs}
\end{DoxyParamCaption}
)}}\label{a01159_af4b8a768947dd221fdd35bd3fbf63d53}


Define abstract I\+O names via shader defines. 

Default shader inputs and outputs can be conveniently accessed via S\+G\+\_\+\+I\+N\+P\+U\+T\+\_\+\+X and S\+G\+\_\+\+O\+U\+T\+P\+U\+T\+\_\+\+X defines without having to worry about the combinatoric problem of shader stages. For example, in a fragment-\/shader view-\/space normals can always be accessed via S\+G\+\_\+\+I\+N\+P\+U\+T\+\_\+\+N\+O\+R\+M\+A\+L\+V\+S, regardless whether there is a geometry shader or not.


\begin{DoxyParams}{Parameters}
{\em \+\_\+iodesc} & shader I\+O descriptor \\
\hline
{\em \+\_\+vs} & I\+O abstraction for vertex shader \\
\hline
{\em \+\_\+fs} & I\+O abstraction for fragment shader \\
\hline
\end{DoxyParams}
\hypertarget{a01159_a1dfbe53393e3b0124d33e2565d71e4de}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+Input\+Name@{get\+Input\+Name}}
\index{get\+Input\+Name@{get\+Input\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+Input\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+Input\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+id}
\end{DoxyParamCaption}
) const}}\label{a01159_a1dfbe53393e3b0124d33e2565d71e4de}


get variable name of input 


\begin{DoxyParams}{Parameters}
{\em \+\_\+id} & zero based index of input \\
\hline
\end{DoxyParams}
\hypertarget{a01159_a1dfbe53393e3b0124d33e2565d71e4de}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+Input\+Name@{get\+Input\+Name}}
\index{get\+Input\+Name@{get\+Input\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+Input\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+Input\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+id}
\end{DoxyParamCaption}
) const}}\label{a01159_a1dfbe53393e3b0124d33e2565d71e4de}


get variable name of input 


\begin{DoxyParams}{Parameters}
{\em \+\_\+id} & zero based index of input \\
\hline
\end{DoxyParams}
\hypertarget{a01159_a1dfbe53393e3b0124d33e2565d71e4de}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+Input\+Name@{get\+Input\+Name}}
\index{get\+Input\+Name@{get\+Input\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+Input\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+Input\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+id}
\end{DoxyParamCaption}
) const}}\label{a01159_a1dfbe53393e3b0124d33e2565d71e4de}


get variable name of input 


\begin{DoxyParams}{Parameters}
{\em \+\_\+id} & zero based index of input \\
\hline
\end{DoxyParams}
\hypertarget{a01159_a98fdf3b73d46b19df440131faeeafc6d}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+I\+O\+Map\+Name@{get\+I\+O\+Map\+Name}}
\index{get\+I\+O\+Map\+Name@{get\+I\+O\+Map\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+I\+O\+Map\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+I\+O\+Map\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+in\+Id}
\end{DoxyParamCaption}
) const}}\label{a01159_a98fdf3b73d46b19df440131faeeafc6d}


get corresponding output name of an input id 


\begin{DoxyParams}{Parameters}
{\em \+\_\+in\+Id} & zero-\/based index of input id \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
matching output name 
\end{DoxyReturn}
\hypertarget{a01159_a98fdf3b73d46b19df440131faeeafc6d}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+I\+O\+Map\+Name@{get\+I\+O\+Map\+Name}}
\index{get\+I\+O\+Map\+Name@{get\+I\+O\+Map\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+I\+O\+Map\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+I\+O\+Map\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+in\+Id}
\end{DoxyParamCaption}
) const}}\label{a01159_a98fdf3b73d46b19df440131faeeafc6d}


get corresponding output name of an input id 


\begin{DoxyParams}{Parameters}
{\em \+\_\+in\+Id} & zero-\/based index of input id \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
matching output name 
\end{DoxyReturn}
\hypertarget{a01159_a98fdf3b73d46b19df440131faeeafc6d}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+I\+O\+Map\+Name@{get\+I\+O\+Map\+Name}}
\index{get\+I\+O\+Map\+Name@{get\+I\+O\+Map\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+I\+O\+Map\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+I\+O\+Map\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+in\+Id}
\end{DoxyParamCaption}
) const}}\label{a01159_a98fdf3b73d46b19df440131faeeafc6d}


get corresponding output name of an input id 


\begin{DoxyParams}{Parameters}
{\em \+\_\+in\+Id} & zero-\/based index of input id \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
matching output name 
\end{DoxyReturn}
\hypertarget{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+Output\+Name@{get\+Output\+Name}}
\index{get\+Output\+Name@{get\+Output\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+Output\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+Output\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+id}
\end{DoxyParamCaption}
) const}}\label{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}


get variable name of output 


\begin{DoxyParams}{Parameters}
{\em \+\_\+id} & zero based index of output \\
\hline
\end{DoxyParams}
\hypertarget{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+Output\+Name@{get\+Output\+Name}}
\index{get\+Output\+Name@{get\+Output\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+Output\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+Output\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+id}
\end{DoxyParamCaption}
) const}}\label{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}


get variable name of output 


\begin{DoxyParams}{Parameters}
{\em \+\_\+id} & zero based index of output \\
\hline
\end{DoxyParams}
\hypertarget{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!get\+Output\+Name@{get\+Output\+Name}}
\index{get\+Output\+Name@{get\+Output\+Name}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{get\+Output\+Name}]{\setlength{\rightskip}{0pt plus 5cm}Q\+String A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::get\+Output\+Name (
\begin{DoxyParamCaption}
\item[{int}]{\+\_\+id}
\end{DoxyParamCaption}
) const}}\label{a01159_aaf85831725f9bd10aaefacbaa95cfbd7}


get variable name of output 


\begin{DoxyParams}{Parameters}
{\em \+\_\+id} & zero based index of output \\
\hline
\end{DoxyParams}
\hypertarget{a01159_ad3f89a615509fec4ca29d878b995117f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!has\+Define@{has\+Define}}
\index{has\+Define@{has\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{has\+Define}]{\setlength{\rightskip}{0pt plus 5cm}bool A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::has\+Define (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+define}
\end{DoxyParamCaption}
) const}}\label{a01159_ad3f89a615509fec4ca29d878b995117f}


Check for define. 

Example\+: 
\begin{DoxyCode}
\hyperlink{a01159_ad3f89a615509fec4ca29d878b995117f}{hasDefine}(\textcolor{stringliteral}{"#define SG\_REQUEST\_NORMAL"})
\end{DoxyCode}
 \hypertarget{a01159_ad3f89a615509fec4ca29d878b995117f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!has\+Define@{has\+Define}}
\index{has\+Define@{has\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{has\+Define}]{\setlength{\rightskip}{0pt plus 5cm}bool A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::has\+Define (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+define}
\end{DoxyParamCaption}
) const}}\label{a01159_ad3f89a615509fec4ca29d878b995117f}


Check for define. 

Example\+: 
\begin{DoxyCode}
\hyperlink{a01159_ad3f89a615509fec4ca29d878b995117f}{hasDefine}(\textcolor{stringliteral}{"#define SG\_REQUEST\_NORMAL"})
\end{DoxyCode}
 \hypertarget{a01159_ad3f89a615509fec4ca29d878b995117f}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!has\+Define@{has\+Define}}
\index{has\+Define@{has\+Define}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{has\+Define}]{\setlength{\rightskip}{0pt plus 5cm}bool A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::has\+Define (
\begin{DoxyParamCaption}
\item[{Q\+String}]{\+\_\+define}
\end{DoxyParamCaption}
) const}}\label{a01159_ad3f89a615509fec4ca29d878b995117f}


Check for define. 

Example\+: 
\begin{DoxyCode}
\hyperlink{a01159_ad3f89a615509fec4ca29d878b995117f}{hasDefine}(\textcolor{stringliteral}{"#define SG\_REQUEST\_NORMAL"})
\end{DoxyCode}
 \hypertarget{a01159_ac4d32acc51399b8dfc3b4ab695598094}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!init\+Default\+Uniforms@{init\+Default\+Uniforms}}
\index{init\+Default\+Uniforms@{init\+Default\+Uniforms}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{init\+Default\+Uniforms}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::init\+Default\+Uniforms (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}\label{a01159_ac4d32acc51399b8dfc3b4ab695598094}


Adds frequently used uniform parameters. 

Adds frequently used uniform parameters like\+:
\begin{DoxyItemize}
\item world, view, projection matrices
\item cam pos, view dir
\item per object material names\+: g\+\_\+c\+Diffuse, g\+\_\+c\+Ambient... 
\end{DoxyItemize}\hypertarget{a01159_ac4d32acc51399b8dfc3b4ab695598094}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!init\+Default\+Uniforms@{init\+Default\+Uniforms}}
\index{init\+Default\+Uniforms@{init\+Default\+Uniforms}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{init\+Default\+Uniforms}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::init\+Default\+Uniforms (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}\label{a01159_ac4d32acc51399b8dfc3b4ab695598094}


Adds frequently used uniform parameters. 

Adds frequently used uniform parameters like\+:
\begin{DoxyItemize}
\item world, view, projection matrices
\item cam pos, view dir
\item per object material names\+: g\+\_\+c\+Diffuse, g\+\_\+c\+Ambient... 
\end{DoxyItemize}\hypertarget{a01159_ac4d32acc51399b8dfc3b4ab695598094}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!init\+Default\+Uniforms@{init\+Default\+Uniforms}}
\index{init\+Default\+Uniforms@{init\+Default\+Uniforms}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{init\+Default\+Uniforms}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::init\+Default\+Uniforms (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}\label{a01159_ac4d32acc51399b8dfc3b4ab695598094}


Adds frequently used uniform parameters. 

Adds frequently used uniform parameters like\+:
\begin{DoxyItemize}
\item world, view, projection matrices
\item cam pos, view dir
\item per object material names\+: g\+\_\+c\+Diffuse, g\+\_\+c\+Ambient... 
\end{DoxyItemize}\hypertarget{a01159_a640187072280e47f55de3dd825a6ede9}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!match\+Inputs@{match\+Inputs}}
\index{match\+Inputs@{match\+Inputs}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{match\+Inputs}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::match\+Inputs (
\begin{DoxyParamCaption}
\item[{const {\bf Shader\+Generator} $\ast$}]{\+\_\+previous\+Shader\+Stage, }
\item[{bool}]{\+\_\+pass\+To\+Next\+Stage, }
\item[{Q\+String}]{\+\_\+input\+Prefix = {\ttfamily \char`\"{}outVertex\char`\"{}}, }
\item[{Q\+String}]{\+\_\+output\+Prefix = {\ttfamily \char`\"{}outGeometry\char`\"{}}}
\end{DoxyParamCaption}
)}}\label{a01159_a640187072280e47f55de3dd825a6ede9}


Perform name matching of outputs and inputs between two shader stages. 

I\+O of this shader (for instance fragment-\/shader) and its previous shader (for instance vertex shader) require matching names. Example\+: The vertex shader has an output \char`\"{}out vec3 out\+Vertex\+Normal\char`\"{}, then this function simply adds the input \char`\"{}in vec3 out\+Vertex\+Normal\char`\"{} to the current shader (either a geometry or fragment shader). If this is a geometry shader, \+\_\+pass\+To\+Next\+Stage should be set to true so that \char`\"{}out vec3 out\+Geometry\+Normal\char`\"{} is also added to the outputs.


\begin{DoxyParams}{Parameters}
{\em \+\_\+previous\+Shader\+Stage} & shader of the previous stage, which should have all outputs setup already \\
\hline
{\em \+\_\+pass\+To\+Next\+Stage} & all outputs of the previous shader stage are passed to the next stage (should be false for fragment shader for instance) \\
\hline
{\em \+\_\+input\+Prefix} & name prefix of inputs to this shader (only necessary if \+\_\+pass\+To\+Next\+Stage is true) \\
\hline
{\em \+\_\+output\+Prefix} & name prefix of outputs of this shader (only necessary if \+\_\+pass\+To\+Next\+Stage is true) \\
\hline
\end{DoxyParams}
\hypertarget{a01159_a640187072280e47f55de3dd825a6ede9}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!match\+Inputs@{match\+Inputs}}
\index{match\+Inputs@{match\+Inputs}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{match\+Inputs}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::match\+Inputs (
\begin{DoxyParamCaption}
\item[{const {\bf Shader\+Generator} $\ast$}]{\+\_\+previous\+Shader\+Stage, }
\item[{bool}]{\+\_\+pass\+To\+Next\+Stage, }
\item[{Q\+String}]{\+\_\+input\+Prefix = {\ttfamily \char`\"{}outVertex\char`\"{}}, }
\item[{Q\+String}]{\+\_\+output\+Prefix = {\ttfamily \char`\"{}outGeometry\char`\"{}}}
\end{DoxyParamCaption}
)}}\label{a01159_a640187072280e47f55de3dd825a6ede9}


Perform name matching of outputs and inputs between two shader stages. 

I\+O of this shader (for instance fragment-\/shader) and its previous shader (for instance vertex shader) require matching names. Example\+: The vertex shader has an output \char`\"{}out vec3 out\+Vertex\+Normal\char`\"{}, then this function simply adds the input \char`\"{}in vec3 out\+Vertex\+Normal\char`\"{} to the current shader (either a geometry or fragment shader). If this is a geometry shader, \+\_\+pass\+To\+Next\+Stage should be set to true so that \char`\"{}out vec3 out\+Geometry\+Normal\char`\"{} is also added to the outputs.


\begin{DoxyParams}{Parameters}
{\em \+\_\+previous\+Shader\+Stage} & shader of the previous stage, which should have all outputs setup already \\
\hline
{\em \+\_\+pass\+To\+Next\+Stage} & all outputs of the previous shader stage are passed to the next stage (should be false for fragment shader for instance) \\
\hline
{\em \+\_\+input\+Prefix} & name prefix of inputs to this shader (only necessary if \+\_\+pass\+To\+Next\+Stage is true) \\
\hline
{\em \+\_\+output\+Prefix} & name prefix of outputs of this shader (only necessary if \+\_\+pass\+To\+Next\+Stage is true) \\
\hline
\end{DoxyParams}
\hypertarget{a01159_a640187072280e47f55de3dd825a6ede9}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!match\+Inputs@{match\+Inputs}}
\index{match\+Inputs@{match\+Inputs}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{match\+Inputs}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::match\+Inputs (
\begin{DoxyParamCaption}
\item[{const {\bf Shader\+Generator} $\ast$}]{\+\_\+previous\+Shader\+Stage, }
\item[{bool}]{\+\_\+pass\+To\+Next\+Stage, }
\item[{Q\+String}]{\+\_\+input\+Prefix = {\ttfamily \char`\"{}outVertex\char`\"{}}, }
\item[{Q\+String}]{\+\_\+output\+Prefix = {\ttfamily \char`\"{}outGeometry\char`\"{}}}
\end{DoxyParamCaption}
)}}\label{a01159_a640187072280e47f55de3dd825a6ede9}


Perform name matching of outputs and inputs between two shader stages. 

I\+O of this shader (for instance fragment-\/shader) and its previous shader (for instance vertex shader) require matching names. Example\+: The vertex shader has an output \char`\"{}out vec3 out\+Vertex\+Normal\char`\"{}, then this function simply adds the input \char`\"{}in vec3 out\+Vertex\+Normal\char`\"{} to the current shader (either a geometry or fragment shader). If this is a geometry shader, \+\_\+pass\+To\+Next\+Stage should be set to true so that \char`\"{}out vec3 out\+Geometry\+Normal\char`\"{} is also added to the outputs.


\begin{DoxyParams}{Parameters}
{\em \+\_\+previous\+Shader\+Stage} & shader of the previous stage, which should have all outputs setup already \\
\hline
{\em \+\_\+pass\+To\+Next\+Stage} & all outputs of the previous shader stage are passed to the next stage (should be false for fragment shader for instance) \\
\hline
{\em \+\_\+input\+Prefix} & name prefix of inputs to this shader (only necessary if \+\_\+pass\+To\+Next\+Stage is true) \\
\hline
{\em \+\_\+output\+Prefix} & name prefix of outputs of this shader (only necessary if \+\_\+pass\+To\+Next\+Stage is true) \\
\hline
\end{DoxyParams}
\hypertarget{a01159_adaa6fe80d2d581cf8a945adfb6061289}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!save\+To\+File@{save\+To\+File}}
\index{save\+To\+File@{save\+To\+File}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{save\+To\+File}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::save\+To\+File (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{\+\_\+file\+Name}
\end{DoxyParamCaption}
)}}\label{a01159_adaa6fe80d2d581cf8a945adfb6061289}


Save generated shader code to text file. 


\begin{DoxyParams}{Parameters}
{\em \+\_\+file\+Name} & Where to save \\
\hline
\end{DoxyParams}
\hypertarget{a01159_adaa6fe80d2d581cf8a945adfb6061289}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!save\+To\+File@{save\+To\+File}}
\index{save\+To\+File@{save\+To\+File}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{save\+To\+File}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::save\+To\+File (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{\+\_\+file\+Name}
\end{DoxyParamCaption}
)}}\label{a01159_adaa6fe80d2d581cf8a945adfb6061289}


Save generated shader code to text file. 


\begin{DoxyParams}{Parameters}
{\em \+\_\+file\+Name} & Where to save \\
\hline
\end{DoxyParams}
\hypertarget{a01159_adaa6fe80d2d581cf8a945adfb6061289}{\index{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}!save\+To\+File@{save\+To\+File}}
\index{save\+To\+File@{save\+To\+File}!A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator@{A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator}}
\subsubsection[{save\+To\+File}]{\setlength{\rightskip}{0pt plus 5cm}void A\+C\+G\+::\+Scene\+Graph\+::\+A\+C\+G\+::\+Shader\+Generator\+::save\+To\+File (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{\+\_\+file\+Name}
\end{DoxyParamCaption}
)}}\label{a01159_adaa6fe80d2d581cf8a945adfb6061289}


Save generated shader code to text file. 


\begin{DoxyParams}{Parameters}
{\em \+\_\+file\+Name} & Where to save \\
\hline
\end{DoxyParams}


The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item 
A\+C\+G/\+Scenegraph/Mesh\+Node2\+T.\+cc\end{DoxyCompactItemize}
