File indexing completed on 2026-09-10 09:17:47
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef _OpenGl_SetOfShaderPrograms_HeaderFile
0017 #define _OpenGl_SetOfShaderPrograms_HeaderFile
0018
0019 #include <Graphic3d_ShaderFlags.hxx>
0020 #include <Graphic3d_TypeOfShadingModel.hxx>
0021 #include <NCollection_DataMap.hxx>
0022
0023 class OpenGl_ShaderProgram;
0024
0025
0026 class OpenGl_SetOfPrograms : public Standard_Transient
0027 {
0028 DEFINE_STANDARD_RTTI_INLINE(OpenGl_SetOfPrograms, Standard_Transient)
0029 public:
0030
0031 OpenGl_SetOfPrograms() {}
0032
0033
0034 Handle(OpenGl_ShaderProgram)& ChangeValue(Standard_Integer theProgramBits)
0035 {
0036 return myPrograms[theProgramBits];
0037 }
0038
0039 protected:
0040 Handle(OpenGl_ShaderProgram) myPrograms[Graphic3d_ShaderFlags_NB];
0041 };
0042
0043
0044 class OpenGl_SetOfShaderPrograms : public Standard_Transient
0045 {
0046 DEFINE_STANDARD_RTTI_INLINE(OpenGl_SetOfShaderPrograms, Standard_Transient)
0047 public:
0048
0049 OpenGl_SetOfShaderPrograms() {}
0050
0051
0052 OpenGl_SetOfShaderPrograms(const Handle(OpenGl_SetOfPrograms)& thePrograms)
0053 {
0054 for (Standard_Integer aSetIter = 0; aSetIter < Graphic3d_TypeOfShadingModel_NB - 1; ++aSetIter)
0055 {
0056 myPrograms[aSetIter] = thePrograms;
0057 }
0058 }
0059
0060
0061 Handle(OpenGl_ShaderProgram)& ChangeValue(Graphic3d_TypeOfShadingModel theShadingModel,
0062 Standard_Integer theProgramBits)
0063 {
0064 Handle(OpenGl_SetOfPrograms)& aSet = myPrograms[theShadingModel - 1];
0065 if (aSet.IsNull())
0066 {
0067 aSet = new OpenGl_SetOfPrograms();
0068 }
0069 return aSet->ChangeValue(theProgramBits);
0070 }
0071
0072 protected:
0073
0074 Handle(OpenGl_SetOfPrograms) myPrograms[Graphic3d_TypeOfShadingModel_NB - 1];
0075
0076 };
0077
0078 typedef NCollection_DataMap<TCollection_AsciiString, Handle(OpenGl_SetOfShaderPrograms)>
0079 OpenGl_MapOfShaderPrograms;
0080
0081 #endif