0031096: Visualization, TKOpenGl - support metallic-roughness texture mapping
[occt.git] / src / OpenGl / OpenGl_TextureSet.cxx
1 // Created by: Kirill GAVRILOV
2 // Copyright (c) 2013-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15 #include <OpenGl_TextureSet.hxx>
16
17 #include <OpenGl_Texture.hxx>
18
19 IMPLEMENT_STANDARD_RTTIEXT(OpenGl_TextureSet, Standard_Transient)
20
21 // =======================================================================
22 // function : OpenGl_TextureSet
23 // purpose  :
24 // =======================================================================
25 OpenGl_TextureSet::OpenGl_TextureSet (const Handle(OpenGl_Texture)& theTexture)
26 : myTextures (0, 0),
27   myTextureSetBits (Graphic3d_TextureSetBits_NONE)
28 {
29   if (!theTexture.IsNull())
30   {
31     myTextures.ChangeFirst().Texture = theTexture;
32     myTextures.ChangeFirst().Unit = theTexture->Sampler()->Parameters()->TextureUnit();
33   }
34 }
35
36 // =======================================================================
37 // function : IsModulate
38 // purpose  :
39 // =======================================================================
40 bool OpenGl_TextureSet::IsModulate() const
41 {
42   return myTextures.IsEmpty()
43       || myTextures.First().Texture.IsNull()
44       || myTextures.First().Texture->Sampler()->Parameters()->IsModulate();
45 }
46
47 // =======================================================================
48 // function : HasNonPointSprite
49 // purpose  :
50 // =======================================================================
51 bool OpenGl_TextureSet::HasNonPointSprite() const
52 {
53   if (myTextures.IsEmpty())
54   {
55     return false;
56   }
57   else if (myTextures.Size() == 1)
58   {
59     return !myTextures.First().Texture.IsNull()
60         && !myTextures.First().Texture->IsPointSprite();
61   }
62   return !myTextures.First().Texture.IsNull();
63 }
64
65 // =======================================================================
66 // function : HasPointSprite
67 // purpose  :
68 // =======================================================================
69 bool OpenGl_TextureSet::HasPointSprite() const
70 {
71   return !myTextures.IsEmpty()
72       && !myTextures.Last().Texture.IsNull()
73       &&  myTextures.Last().Texture->IsPointSprite();
74 }