\hypertarget{class_ogre_1_1_g_l_s_l_program_manager}{}\section{Ogre\+:\+:G\+L\+S\+L\+Program\+Manager Class Reference}
\label{class_ogre_1_1_g_l_s_l_program_manager}\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}


\hyperlink{namespace_ogre}{Ogre} assumes that there are separate vertex and fragment programs to deal with but \hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} has one program object that represents the active vertex and fragment shader objects during a rendering state.  




{\ttfamily \#include $<$Ogre\+G\+L\+S\+L\+Program\+Manager.\+h$>$}



Inheritance diagram for Ogre\+:\+:G\+L\+S\+L\+Program\+Manager\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{class_ogre_1_1_g_l_s_l_program_manager__inherit__graph}
\end{center}
\end{figure}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{class_ogre_1_1_g_l_s_l_program_manager_af4cf1c71b5c7e11e8b9fea6d2b0c99c2}{G\+L\+S\+L\+Program\+Manager} (\hyperlink{class_ogre_1_1_g_l3_plus_render_system}{G\+L3\+Plus\+Render\+System} $\ast$render\+System)
\item 
\hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a939666db3d50b0d022b97e478097c843}{$\sim$\+G\+L\+S\+L\+Program\+Manager} ()
\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_common_af0074b30d327b54e5f352ca64612a043}{destroy\+All\+By\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_shader_common}{G\+L\+S\+L\+Shader\+Common} $\ast$shader)
\begin{DoxyCompactList}\small\item\em Destroy all programs which referencing this shader. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_common_ae8a109b69705dcab009b69f6334c58b1}{extract\+Uniforms\+From\+G\+L\+SL} (const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&src, \hyperlink{struct_ogre_1_1_gpu_named_constants}{Gpu\+Named\+Constants} \&constant\+Defs, const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&filename)
\begin{DoxyCompactList}\small\item\em Populate a list of uniforms based on \hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} source and store them in \hyperlink{struct_ogre_1_1_gpu_named_constants}{Gpu\+Named\+Constants}. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a79cbeff7100a69a7cf17355e0bbb31f6}{extract\+Uniforms\+From\+Program} (G\+Luint program\+Object, const \hyperlink{group___materials_gae4823c1377e5d4c312a3da9d1cb8534a}{Gpu\+Constant\+Definition\+Map} $\ast$(\&constant\+Defs)\mbox{[}6\mbox{]}, \hyperlink{namespace_ogre_ab6bb0d65dc078300d6e0459f926292b4}{G\+L\+Uniform\+Reference\+List} \&uniform\+List, \hyperlink{namespace_ogre_adb9443f0308cf797d752d4aad47d40f7}{G\+L\+Atomic\+Counter\+Reference\+List} \&counter\+List, \hyperlink{namespace_ogre_a5746fd100d687fa86400aba8bd1e81da}{G\+L\+Uniform\+Buffer\+List} \&uniform\+Buffer\+List, \hyperlink{namespace_ogre_a0013629ba7e62b9f0ffb427b0db06059}{Shared\+Params\+Buffer\+Map} \&shared\+Params\+Buffer\+Map, \hyperlink{namespace_ogre_a1bd5e7fa02cc0018b170acf18fc7739f}{G\+L\+Counter\+Buffer\+List} \&counter\+Buffer\+List)
\begin{DoxyCompactList}\small\item\em Populate a list of uniforms based on an Open\+GL program object. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_g_l_s_l_program}{G\+L\+S\+L\+Program} $\ast$ \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a5e4b46a534ca76e9a84ef4540c702fef}{get\+Active\+Program} (void)
\begin{DoxyCompactList}\small\item\em Get the program object that links the two active shader objects together if a program object was not already created and linked a new one is created and linked. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_g_l3_plus_state_cache_manager}{G\+L3\+Plus\+State\+Cache\+Manager} $\ast$ \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a5268e2dfb7df77597f023f4f7345613a}{get\+State\+Cache\+Manager} ()
\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a42c6b43111b4d0dde394f88bcb870859}{set\+Active\+Compute\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$compute\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the shader for the next rendering state. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a4d2c974164eacdd924edd672f62e32db}{set\+Active\+Domain\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$domain\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the shader for the next rendering state. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a1da491a28b31b398c32e7223fb085b44}{set\+Active\+Fragment\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$fragment\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the shader for the next rendering state. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a3c204e64daa7595ff4591f6843ab2986}{set\+Active\+Geometry\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$geometry\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the shader for the next rendering state. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_ac9472bbc66b9287cafce3b11987de0f9}{set\+Active\+Hull\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$hull\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the shader for the next rendering state. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a430829c7ddad5c27ca459682f2fa494c}{set\+Active\+Vertex\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$vertex\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the shader for the next rendering state. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static \hyperlink{class_ogre_1_1_g_l_s_l_program_manager}{G\+L\+S\+L\+Program\+Manager} \& \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_a65bbd8b2898d2d8531170426ee437889}{get\+Singleton} (void)
\item 
static \hyperlink{class_ogre_1_1_g_l_s_l_program_manager}{G\+L\+S\+L\+Program\+Manager} $\ast$ \hyperlink{class_ogre_1_1_g_l_s_l_program_manager_ae8afd2bece4f87e1fbac186c275ac8db}{get\+Singleton\+Ptr} (void)
\end{DoxyCompactItemize}


\subsection{Detailed Description}
\hyperlink{namespace_ogre}{Ogre} assumes that there are separate vertex and fragment programs to deal with but \hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} has one program object that represents the active vertex and fragment shader objects during a rendering state. 

\hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} Vertex and fragment shader objects are compiled separately and then attached to a program object and then the program object is linked. Since \hyperlink{namespace_ogre}{Ogre} can only handle one vertex program and one fragment program being active in a pass, the \hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} Link Program Manager does the same. The \hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} Link program manager acts as a state machine and activates a program object based on the active vertex and fragment program. Previously created program objects are stored along with a unique key in a hash\+\_\+map for quick retrieval the next time the program object is required. 

\subsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_af4cf1c71b5c7e11e8b9fea6d2b0c99c2}\label{class_ogre_1_1_g_l_s_l_program_manager_af4cf1c71b5c7e11e8b9fea6d2b0c99c2}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!G\+L\+S\+L\+Program\+Manager@{G\+L\+S\+L\+Program\+Manager}}
\index{G\+L\+S\+L\+Program\+Manager@{G\+L\+S\+L\+Program\+Manager}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{G\+L\+S\+L\+Program\+Manager()}{GLSLProgramManager()}}
{\footnotesize\ttfamily Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::\+G\+L\+S\+L\+Program\+Manager (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l3_plus_render_system}{G\+L3\+Plus\+Render\+System} $\ast$}]{render\+System }\end{DoxyParamCaption})}

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a939666db3d50b0d022b97e478097c843}\label{class_ogre_1_1_g_l_s_l_program_manager_a939666db3d50b0d022b97e478097c843}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!````~G\+L\+S\+L\+Program\+Manager@{$\sim$\+G\+L\+S\+L\+Program\+Manager}}
\index{````~G\+L\+S\+L\+Program\+Manager@{$\sim$\+G\+L\+S\+L\+Program\+Manager}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{$\sim$\+G\+L\+S\+L\+Program\+Manager()}{~GLSLProgramManager()}}
{\footnotesize\ttfamily Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::$\sim$\+G\+L\+S\+L\+Program\+Manager (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



\subsection{Member Function Documentation}
\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a5e4b46a534ca76e9a84ef4540c702fef}\label{class_ogre_1_1_g_l_s_l_program_manager_a5e4b46a534ca76e9a84ef4540c702fef}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!get\+Active\+Program@{get\+Active\+Program}}
\index{get\+Active\+Program@{get\+Active\+Program}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+Active\+Program()}{getActiveProgram()}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_g_l_s_l_program}{G\+L\+S\+L\+Program}$\ast$ Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::get\+Active\+Program (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Get the program object that links the two active shader objects together if a program object was not already created and linked a new one is created and linked. 

\begin{DoxyNote}{Note}
this method does N\+OT link seperable programs. 
\end{DoxyNote}
\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a430829c7ddad5c27ca459682f2fa494c}\label{class_ogre_1_1_g_l_s_l_program_manager_a430829c7ddad5c27ca459682f2fa494c}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!set\+Active\+Vertex\+Shader@{set\+Active\+Vertex\+Shader}}
\index{set\+Active\+Vertex\+Shader@{set\+Active\+Vertex\+Shader}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{set\+Active\+Vertex\+Shader()}{setActiveVertexShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::set\+Active\+Vertex\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$}]{vertex\+Gpu\+Program }\end{DoxyParamCaption})}



Set the shader for the next rendering state. 

The active program object will be cleared. Normally called from the G\+L\+S\+L\+Shader\+::bind\+Program and unbind\+Program methods \mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_ac9472bbc66b9287cafce3b11987de0f9}\label{class_ogre_1_1_g_l_s_l_program_manager_ac9472bbc66b9287cafce3b11987de0f9}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!set\+Active\+Hull\+Shader@{set\+Active\+Hull\+Shader}}
\index{set\+Active\+Hull\+Shader@{set\+Active\+Hull\+Shader}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{set\+Active\+Hull\+Shader()}{setActiveHullShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::set\+Active\+Hull\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$}]{hull\+Gpu\+Program }\end{DoxyParamCaption})}



Set the shader for the next rendering state. 

The active program object will be cleared. Normally called from the G\+L\+S\+L\+Shader\+::bind\+Program and unbind\+Program methods \mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a4d2c974164eacdd924edd672f62e32db}\label{class_ogre_1_1_g_l_s_l_program_manager_a4d2c974164eacdd924edd672f62e32db}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!set\+Active\+Domain\+Shader@{set\+Active\+Domain\+Shader}}
\index{set\+Active\+Domain\+Shader@{set\+Active\+Domain\+Shader}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{set\+Active\+Domain\+Shader()}{setActiveDomainShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::set\+Active\+Domain\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$}]{domain\+Gpu\+Program }\end{DoxyParamCaption})}



Set the shader for the next rendering state. 

The active program object will be cleared. Normally called from the G\+L\+S\+L\+Shader\+::bind\+Program and unbind\+Program methods \mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a3c204e64daa7595ff4591f6843ab2986}\label{class_ogre_1_1_g_l_s_l_program_manager_a3c204e64daa7595ff4591f6843ab2986}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!set\+Active\+Geometry\+Shader@{set\+Active\+Geometry\+Shader}}
\index{set\+Active\+Geometry\+Shader@{set\+Active\+Geometry\+Shader}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{set\+Active\+Geometry\+Shader()}{setActiveGeometryShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::set\+Active\+Geometry\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$}]{geometry\+Gpu\+Program }\end{DoxyParamCaption})}



Set the shader for the next rendering state. 

The active program object will be cleared. Normally called from the G\+L\+S\+L\+Shader\+::bind\+Program and unbind\+Program methods \mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a1da491a28b31b398c32e7223fb085b44}\label{class_ogre_1_1_g_l_s_l_program_manager_a1da491a28b31b398c32e7223fb085b44}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!set\+Active\+Fragment\+Shader@{set\+Active\+Fragment\+Shader}}
\index{set\+Active\+Fragment\+Shader@{set\+Active\+Fragment\+Shader}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{set\+Active\+Fragment\+Shader()}{setActiveFragmentShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::set\+Active\+Fragment\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$}]{fragment\+Gpu\+Program }\end{DoxyParamCaption})}



Set the shader for the next rendering state. 

The active program object will be cleared. Normally called from the G\+L\+S\+L\+Shader\+::bind\+Program and unbind\+Program methods \mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a42c6b43111b4d0dde394f88bcb870859}\label{class_ogre_1_1_g_l_s_l_program_manager_a42c6b43111b4d0dde394f88bcb870859}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!set\+Active\+Compute\+Shader@{set\+Active\+Compute\+Shader}}
\index{set\+Active\+Compute\+Shader@{set\+Active\+Compute\+Shader}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{set\+Active\+Compute\+Shader()}{setActiveComputeShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::set\+Active\+Compute\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_shader}{G\+L\+S\+L\+Shader} $\ast$}]{compute\+Gpu\+Program }\end{DoxyParamCaption})}



Set the shader for the next rendering state. 

The active program object will be cleared. Normally called from the G\+L\+S\+L\+Shader\+::bind\+Program and unbind\+Program methods \mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a79cbeff7100a69a7cf17355e0bbb31f6}\label{class_ogre_1_1_g_l_s_l_program_manager_a79cbeff7100a69a7cf17355e0bbb31f6}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!extract\+Uniforms\+From\+Program@{extract\+Uniforms\+From\+Program}}
\index{extract\+Uniforms\+From\+Program@{extract\+Uniforms\+From\+Program}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{extract\+Uniforms\+From\+Program()}{extractUniformsFromProgram()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::extract\+Uniforms\+From\+Program (\begin{DoxyParamCaption}\item[{G\+Luint}]{program\+Object,  }\item[{const \hyperlink{group___materials_gae4823c1377e5d4c312a3da9d1cb8534a}{Gpu\+Constant\+Definition\+Map} $\ast$(\&)}]{constant\+Defs\mbox{[}6\mbox{]},  }\item[{\hyperlink{namespace_ogre_ab6bb0d65dc078300d6e0459f926292b4}{G\+L\+Uniform\+Reference\+List} \&}]{uniform\+List,  }\item[{\hyperlink{namespace_ogre_adb9443f0308cf797d752d4aad47d40f7}{G\+L\+Atomic\+Counter\+Reference\+List} \&}]{counter\+List,  }\item[{\hyperlink{namespace_ogre_a5746fd100d687fa86400aba8bd1e81da}{G\+L\+Uniform\+Buffer\+List} \&}]{uniform\+Buffer\+List,  }\item[{\hyperlink{namespace_ogre_a0013629ba7e62b9f0ffb427b0db06059}{Shared\+Params\+Buffer\+Map} \&}]{shared\+Params\+Buffer\+Map,  }\item[{\hyperlink{namespace_ogre_a1bd5e7fa02cc0018b170acf18fc7739f}{G\+L\+Counter\+Buffer\+List} \&}]{counter\+Buffer\+List }\end{DoxyParamCaption})}



Populate a list of uniforms based on an Open\+GL program object. 

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a5268e2dfb7df77597f023f4f7345613a}\label{class_ogre_1_1_g_l_s_l_program_manager_a5268e2dfb7df77597f023f4f7345613a}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!get\+State\+Cache\+Manager@{get\+State\+Cache\+Manager}}
\index{get\+State\+Cache\+Manager@{get\+State\+Cache\+Manager}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+State\+Cache\+Manager()}{getStateCacheManager()}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_g_l3_plus_state_cache_manager}{G\+L3\+Plus\+State\+Cache\+Manager}$\ast$ Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::get\+State\+Cache\+Manager (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_a65bbd8b2898d2d8531170426ee437889}\label{class_ogre_1_1_g_l_s_l_program_manager_a65bbd8b2898d2d8531170426ee437889}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!get\+Singleton@{get\+Singleton}}
\index{get\+Singleton@{get\+Singleton}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+Singleton()}{getSingleton()}}
{\footnotesize\ttfamily static \hyperlink{class_ogre_1_1_g_l_s_l_program_manager}{G\+L\+S\+L\+Program\+Manager}\& Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::get\+Singleton (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_ae8afd2bece4f87e1fbac186c275ac8db}\label{class_ogre_1_1_g_l_s_l_program_manager_ae8afd2bece4f87e1fbac186c275ac8db}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!get\+Singleton\+Ptr@{get\+Singleton\+Ptr}}
\index{get\+Singleton\+Ptr@{get\+Singleton\+Ptr}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+Singleton\+Ptr()}{getSingletonPtr()}}
{\footnotesize\ttfamily static \hyperlink{class_ogre_1_1_g_l_s_l_program_manager}{G\+L\+S\+L\+Program\+Manager}$\ast$ Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+::get\+Singleton\+Ptr (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_common_ae8a109b69705dcab009b69f6334c58b1}\label{class_ogre_1_1_g_l_s_l_program_manager_common_ae8a109b69705dcab009b69f6334c58b1}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!extract\+Uniforms\+From\+G\+L\+SL@{extract\+Uniforms\+From\+G\+L\+SL}}
\index{extract\+Uniforms\+From\+G\+L\+SL@{extract\+Uniforms\+From\+G\+L\+SL}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{extract\+Uniforms\+From\+G\+L\+S\+L()}{extractUniformsFromGLSL()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+Common\+::extract\+Uniforms\+From\+G\+L\+SL (\begin{DoxyParamCaption}\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{src,  }\item[{\hyperlink{struct_ogre_1_1_gpu_named_constants}{Gpu\+Named\+Constants} \&}]{constant\+Defs,  }\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{filename }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}



Populate a list of uniforms based on \hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} source and store them in \hyperlink{struct_ogre_1_1_gpu_named_constants}{Gpu\+Named\+Constants}. 


\begin{DoxyParams}{Parameters}
{\em src} & Reference to the source code. \\
\hline
{\em constant\+Defs} & The defs to populate (will not be cleared before adding, clear it yourself before calling this if that\textquotesingle{}s what you want). \\
\hline
{\em filename} & The file name this came from, for logging errors. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_program_manager_common_af0074b30d327b54e5f352ca64612a043}\label{class_ogre_1_1_g_l_s_l_program_manager_common_af0074b30d327b54e5f352ca64612a043}} 
\index{Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}!destroy\+All\+By\+Shader@{destroy\+All\+By\+Shader}}
\index{destroy\+All\+By\+Shader@{destroy\+All\+By\+Shader}!Ogre\+::\+G\+L\+S\+L\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+Program\+Manager}}
\subsubsection{\texorpdfstring{destroy\+All\+By\+Shader()}{destroyAllByShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+Program\+Manager\+Common\+::destroy\+All\+By\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_shader_common}{G\+L\+S\+L\+Shader\+Common} $\ast$}]{shader }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}



Destroy all programs which referencing this shader. 



The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item 
\hyperlink{_ogre_g_l_s_l_program_manager_8h}{Ogre\+G\+L\+S\+L\+Program\+Manager.\+h}\end{DoxyCompactItemize}
