0029570: Visualization, Graphic3d_Aspect - merge Graphic3d_Group aspects
[occt.git] / src / OpenGl / OpenGl_AspectsTextureSet.hxx
1 // Copyright (c) 2019 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #ifndef _OpenGl_AspectsTextureSet_Header
15 #define _OpenGl_AspectsTextureSet_Header
16
17 #include <Graphic3d_TextureMap.hxx>
18 #include <Graphic3d_TextureSet.hxx>
19
20 class OpenGl_Context;
21 class OpenGl_TextureSet;
22
23 //! OpenGl resources for custom textures.
24 class OpenGl_AspectsTextureSet
25 {
26 public:
27   DEFINE_STANDARD_ALLOC
28 public:
29   //! Empty constructor.
30   OpenGl_AspectsTextureSet() : myIsTextureReady (Standard_False) {}
31
32   //! Return textures array.
33   const Handle(OpenGl_TextureSet)& TextureSet (const Handle(OpenGl_Context)& theCtx,
34                                                const Handle(Graphic3d_TextureSet)& theTextures)
35   {
36     if (!myIsTextureReady)
37     {
38       build (theCtx, theTextures);
39       myIsTextureReady = true;
40     }
41     return myTextures;
42   }
43
44   //! Update texture resource up-to-date state.
45   Standard_EXPORT void UpdateRediness (const Handle(Graphic3d_TextureSet)& theTextures);
46
47   //! Release texture resource.
48   Standard_EXPORT void Release (OpenGl_Context* theCtx);
49
50 private:
51
52   //! Build texture resource.
53   Standard_EXPORT void build (const Handle(OpenGl_Context)& theCtx,
54                               const Handle(Graphic3d_TextureSet)& theTextures);
55
56 private:
57
58   Handle(OpenGl_TextureSet) myTextures;
59   Standard_Boolean          myIsTextureReady;
60
61 };
62
63 #endif // _OpenGl_AspectsTextureSet_Header