\hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager}{}\section{Ogre\+:\+:G\+L\+S\+L\+E\+S\+Program\+Manager Class Reference}
\label{class_ogre_1_1_g_l_s_l_e_s_program_manager}\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+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} ES has one program object that represents the active vertex and fragment shader objects during a rendering state.  




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



Inheritance diagram for Ogre\+:\+:G\+L\+S\+L\+E\+S\+Program\+Manager\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{class_ogre_1_1_g_l_s_l_e_s_program_manager__inherit__graph}
\end{center}
\end{figure}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_a50e82b988e643c514337513b59754847}{G\+L\+S\+L\+E\+S\+Program\+Manager} (void)
\item 
\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_a76217491cb339b9f6f2b3417d00493f3}{$\sim$\+G\+L\+S\+L\+E\+S\+Program\+Manager} (void)
\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 
bool \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_af75ad939d192837c5ac1051347258aaa}{destroy\+Link\+Program} (\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_common}{G\+L\+S\+L\+E\+S\+Program\+Common} $\ast$link\+Program)
\begin{DoxyCompactList}\small\item\em Destroy and remove the linker program from the local cache. \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 
\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_common}{G\+L\+S\+L\+E\+S\+Program\+Common} $\ast$ \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_aee7cca093ec93e57f5c7107a3bcddbc7}{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_l_s_l_e_s_program_common}{G\+L\+S\+L\+E\+S\+Program\+Common} $\ast$ \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_a6879429b01f7f1f4706503232e785142}{get\+By\+Program} (\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program}{G\+L\+S\+L\+E\+S\+Program} $\ast$gpu\+Program)
\begin{DoxyCompactList}\small\item\em Get the linker program by a gpu program. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_a066e3e9ba0fb1683de917888aa38f447}{optimise\+Shader\+Source} (G\+L\+S\+L\+E\+S\+Gpu\+Program $\ast$gpu\+Program)
\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_a32b0ac7b007a52a72f15e2ee75d63e8f}{set\+Active\+Fragment\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program}{G\+L\+S\+L\+E\+S\+Program} $\ast$fragment\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the active shader for the next rendering state. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_a5174b5c82a04dafb112773ab5c16d0b7}{set\+Active\+Vertex\+Shader} (\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program}{G\+L\+S\+L\+E\+S\+Program} $\ast$vertex\+Gpu\+Program)
\begin{DoxyCompactList}\small\item\em Set the active shader for the next rendering state. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static void \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_affcfb036ca7c1dd1d1ceda02c6bf7d2f}{extract\+Uniforms} (G\+Luint program\+Object, const \hyperlink{group___materials_gae4823c1377e5d4c312a3da9d1cb8534a}{Gpu\+Constant\+Definition\+Map} $\ast$vertex\+Constant\+Defs, const \hyperlink{group___materials_gae4823c1377e5d4c312a3da9d1cb8534a}{Gpu\+Constant\+Definition\+Map} $\ast$fragment\+Constant\+Defs, \hyperlink{namespace_ogre_ab6bb0d65dc078300d6e0459f926292b4}{G\+L\+Uniform\+Reference\+List} \&\hyperlink{struct_ogre_1_1list}{list}, \hyperlink{namespace_ogre_a5746fd100d687fa86400aba8bd1e81da}{G\+L\+Uniform\+Buffer\+List} \&shared\+List)
\begin{DoxyCompactList}\small\item\em Populate a list of uniforms based on a program object. \end{DoxyCompactList}\item 
static \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager}{G\+L\+S\+L\+E\+S\+Program\+Manager} \& \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_a8eeedc8c4ea706d891f508b02e00c515}{get\+Singleton} (void)
\item 
static \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager}{G\+L\+S\+L\+E\+S\+Program\+Manager} $\ast$ \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager_aa307dd417d976c725d04b9b2dadf82e3}{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} ES 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} ES Link Program Manager does the same. The \hyperlink{namespace_ogre_1_1_g_l_s_l}{G\+L\+SL} ES 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_e_s_program_manager_a50e82b988e643c514337513b59754847}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_a50e82b988e643c514337513b59754847}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!G\+L\+S\+L\+E\+S\+Program\+Manager@{G\+L\+S\+L\+E\+S\+Program\+Manager}}
\index{G\+L\+S\+L\+E\+S\+Program\+Manager@{G\+L\+S\+L\+E\+S\+Program\+Manager}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{G\+L\+S\+L\+E\+S\+Program\+Manager()}{GLSLESProgramManager()}}
{\footnotesize\ttfamily Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_a76217491cb339b9f6f2b3417d00493f3}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_a76217491cb339b9f6f2b3417d00493f3}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!````~G\+L\+S\+L\+E\+S\+Program\+Manager@{$\sim$\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\index{````~G\+L\+S\+L\+E\+S\+Program\+Manager@{$\sim$\+G\+L\+S\+L\+E\+S\+Program\+Manager}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{$\sim$\+G\+L\+S\+L\+E\+S\+Program\+Manager()}{~GLSLESProgramManager()}}
{\footnotesize\ttfamily Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager\+::$\sim$\+G\+L\+S\+L\+E\+S\+Program\+Manager (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



\subsection{Member Function Documentation}
\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_a32b0ac7b007a52a72f15e2ee75d63e8f}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_a32b0ac7b007a52a72f15e2ee75d63e8f}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!set\+Active\+Fragment\+Shader@{set\+Active\+Fragment\+Shader}}
\index{set\+Active\+Fragment\+Shader@{set\+Active\+Fragment\+Shader}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{set\+Active\+Fragment\+Shader()}{setActiveFragmentShader()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager\+::set\+Active\+Fragment\+Shader (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program}{G\+L\+S\+L\+E\+S\+Program} $\ast$}]{fragment\+Gpu\+Program }\end{DoxyParamCaption})}



Set the active shader for the next rendering state. 

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



Set the active shader for the next rendering state. 

The active program object will be cleared. Normally called from the G\+L\+S\+L\+E\+S\+Gpu\+Program\+::bind\+Program and unbind\+Program methods \mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_aee7cca093ec93e57f5c7107a3bcddbc7}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_aee7cca093ec93e57f5c7107a3bcddbc7}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!get\+Active\+Program@{get\+Active\+Program}}
\index{get\+Active\+Program@{get\+Active\+Program}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+Active\+Program()}{getActiveProgram()}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_common}{G\+L\+S\+L\+E\+S\+Program\+Common}$\ast$ Ogre\+::\+G\+L\+S\+L\+E\+S\+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. 

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_a6879429b01f7f1f4706503232e785142}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_a6879429b01f7f1f4706503232e785142}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!get\+By\+Program@{get\+By\+Program}}
\index{get\+By\+Program@{get\+By\+Program}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+By\+Program()}{getByProgram()}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_common}{G\+L\+S\+L\+E\+S\+Program\+Common}$\ast$ Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager\+::get\+By\+Program (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program}{G\+L\+S\+L\+E\+S\+Program} $\ast$}]{gpu\+Program }\end{DoxyParamCaption})}



Get the linker program by a gpu program. 

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_af75ad939d192837c5ac1051347258aaa}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_af75ad939d192837c5ac1051347258aaa}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!destroy\+Link\+Program@{destroy\+Link\+Program}}
\index{destroy\+Link\+Program@{destroy\+Link\+Program}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{destroy\+Link\+Program()}{destroyLinkProgram()}}
{\footnotesize\ttfamily bool Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager\+::destroy\+Link\+Program (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_common}{G\+L\+S\+L\+E\+S\+Program\+Common} $\ast$}]{link\+Program }\end{DoxyParamCaption})}



Destroy and remove the linker program from the local cache. 

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_a066e3e9ba0fb1683de917888aa38f447}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_a066e3e9ba0fb1683de917888aa38f447}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!optimise\+Shader\+Source@{optimise\+Shader\+Source}}
\index{optimise\+Shader\+Source@{optimise\+Shader\+Source}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{optimise\+Shader\+Source()}{optimiseShaderSource()}}
{\footnotesize\ttfamily void Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager\+::optimise\+Shader\+Source (\begin{DoxyParamCaption}\item[{G\+L\+S\+L\+E\+S\+Gpu\+Program $\ast$}]{gpu\+Program }\end{DoxyParamCaption})}

\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_affcfb036ca7c1dd1d1ceda02c6bf7d2f}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_affcfb036ca7c1dd1d1ceda02c6bf7d2f}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!extract\+Uniforms@{extract\+Uniforms}}
\index{extract\+Uniforms@{extract\+Uniforms}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{extract\+Uniforms()}{extractUniforms()}}
{\footnotesize\ttfamily static void Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager\+::extract\+Uniforms (\begin{DoxyParamCaption}\item[{G\+Luint}]{program\+Object,  }\item[{const \hyperlink{group___materials_gae4823c1377e5d4c312a3da9d1cb8534a}{Gpu\+Constant\+Definition\+Map} $\ast$}]{vertex\+Constant\+Defs,  }\item[{const \hyperlink{group___materials_gae4823c1377e5d4c312a3da9d1cb8534a}{Gpu\+Constant\+Definition\+Map} $\ast$}]{fragment\+Constant\+Defs,  }\item[{\hyperlink{namespace_ogre_ab6bb0d65dc078300d6e0459f926292b4}{G\+L\+Uniform\+Reference\+List} \&}]{list,  }\item[{\hyperlink{namespace_ogre_a5746fd100d687fa86400aba8bd1e81da}{G\+L\+Uniform\+Buffer\+List} \&}]{shared\+List }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Populate a list of uniforms based on a program object. 


\begin{DoxyParams}{Parameters}
{\em program\+Object} & Handle to the program object to query \\
\hline
{\em vertex\+Constant\+Defs} & Definition of the constants extracted from the vertex program, used to match up physical buffer indexes with program uniforms. May be null if there is no vertex program. \\
\hline
{\em fragment\+Constant\+Defs} & Definition of the constants extracted from the fragment program, used to match up physical buffer indexes with program uniforms. May be null if there is no fragment program. \\
\hline
{\em list} & The list to populate (will not be cleared before adding, clear it yourself before calling this if that\textquotesingle{}s what you want). \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{class_ogre_1_1_g_l_s_l_e_s_program_manager_a8eeedc8c4ea706d891f508b02e00c515}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_a8eeedc8c4ea706d891f508b02e00c515}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!get\+Singleton@{get\+Singleton}}
\index{get\+Singleton@{get\+Singleton}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+Singleton()}{getSingleton()}}
{\footnotesize\ttfamily static \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager}{G\+L\+S\+L\+E\+S\+Program\+Manager}\& Ogre\+::\+G\+L\+S\+L\+E\+S\+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_e_s_program_manager_aa307dd417d976c725d04b9b2dadf82e3}\label{class_ogre_1_1_g_l_s_l_e_s_program_manager_aa307dd417d976c725d04b9b2dadf82e3}} 
\index{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!get\+Singleton\+Ptr@{get\+Singleton\+Ptr}}
\index{get\+Singleton\+Ptr@{get\+Singleton\+Ptr}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}}
\subsubsection{\texorpdfstring{get\+Singleton\+Ptr()}{getSingletonPtr()}}
{\footnotesize\ttfamily static \hyperlink{class_ogre_1_1_g_l_s_l_e_s_program_manager}{G\+L\+S\+L\+E\+S\+Program\+Manager}$\ast$ Ogre\+::\+G\+L\+S\+L\+E\+S\+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\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+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\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+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\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager}!destroy\+All\+By\+Shader@{destroy\+All\+By\+Shader}}
\index{destroy\+All\+By\+Shader@{destroy\+All\+By\+Shader}!Ogre\+::\+G\+L\+S\+L\+E\+S\+Program\+Manager@{Ogre\+::\+G\+L\+S\+L\+E\+S\+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_e_s_program_manager_8h}{Ogre\+G\+L\+S\+L\+E\+S\+Program\+Manager.\+h}\end{DoxyCompactItemize}
