1 // Created on: 2014-10-08
2 // Created by: Kirill Gavrilov
3 // Copyright (c) 2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
16 #ifndef _OpenGl_SetOfShaderPrograms_HeaderFile
17 #define _OpenGl_SetOfShaderPrograms_HeaderFile
19 #include <Graphic3d_ShaderFlags.hxx>
20 #include <Graphic3d_TypeOfShadingModel.hxx>
21 #include <NCollection_DataMap.hxx>
23 class OpenGl_ShaderProgram;
25 //! Alias to programs array of predefined length
26 class OpenGl_SetOfPrograms : public Standard_Transient
28 DEFINE_STANDARD_RTTI_INLINE(OpenGl_SetOfPrograms, Standard_Transient)
32 OpenGl_SetOfPrograms() {}
34 //! Access program by index
35 Handle(OpenGl_ShaderProgram)& ChangeValue (Standard_Integer theProgramBits) { return myPrograms[theProgramBits]; }
38 Handle(OpenGl_ShaderProgram) myPrograms[Graphic3d_ShaderFlags_NB]; //!< programs array
41 //! Alias to 2D programs array of predefined length
42 class OpenGl_SetOfShaderPrograms : public Standard_Transient
44 DEFINE_STANDARD_RTTI_INLINE(OpenGl_SetOfShaderPrograms, Standard_Transient)
48 OpenGl_SetOfShaderPrograms() {}
51 OpenGl_SetOfShaderPrograms (const Handle(OpenGl_SetOfPrograms)& thePrograms)
53 for (Standard_Integer aSetIter = 0; aSetIter < Graphic3d_TypeOfShadingModel_NB - 1; ++aSetIter)
55 myPrograms[aSetIter] = thePrograms;
59 //! Access program by index
60 Handle(OpenGl_ShaderProgram)& ChangeValue (Graphic3d_TypeOfShadingModel theShadingModel,
61 Standard_Integer theProgramBits)
63 Handle(OpenGl_SetOfPrograms)& aSet = myPrograms[theShadingModel - 1];
66 aSet = new OpenGl_SetOfPrograms();
68 return aSet->ChangeValue (theProgramBits);
72 Handle(OpenGl_SetOfPrograms) myPrograms[Graphic3d_TypeOfShadingModel_NB - 1]; //!< programs array, excluding Graphic3d_TOSM_UNLIT
75 typedef NCollection_DataMap<TCollection_AsciiString, Handle(OpenGl_SetOfShaderPrograms)> OpenGl_MapOfShaderPrograms;
77 #endif // _OpenGl_SetOfShaderPrograms_HeaderFile