0023544: Texture management in TKOpenGl should be redesigned
[occt.git] / src / Graphic3d / Graphic3d_TextureRoot.cxx
1 // Created on: 1997-07-28
2 // Created by: Pierre CHALAMET
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
5 //
6 // The content of this file is subject to the Open CASCADE Technology Public
7 // License Version 6.5 (the "License"). You may not use the content of this file
8 // except in compliance with the License. Please obtain a copy of the License
9 // at http://www.opencascade.org and read it completely before using this file.
10 //
11 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 //
14 // The Original Code and all software distributed under the License is
15 // distributed on an "AS IS" basis, without warranty of any kind, and the
16 // Initial Developer hereby disclaims all such warranties, including without
17 // limitation, any warranties of merchantability, fitness for a particular
18 // purpose or non-infringement. Please see the License for the specific terms
19 // and conditions governing the rights and limitations under the License.
20
21 #include <Graphic3d_TextureRoot.ixx>
22 #include <Graphic3d_GraphicDevice.hxx>
23 #include <Graphic3d_GraphicDriver.hxx>
24
25 #include <Image_AlienPixMap.hxx>
26
27 #include <OSD_Directory.hxx>
28 #include <OSD_Environment.hxx>
29 #include <OSD_Path.hxx>
30 #include <OSD_Protection.hxx>
31 #include <OSD_File.hxx>
32 #include <Standard_Atomic.hxx>
33
34 namespace
35 {
36   static volatile Standard_Integer THE_TEXTURE_COUNTER = 0;
37 };
38
39 // =======================================================================
40 // function : TexturesFolder
41 // purpose  :
42 // =======================================================================
43 TCollection_AsciiString Graphic3d_TextureRoot::TexturesFolder()
44 {
45   static Standard_Boolean IsDefined = Standard_False;
46   static TCollection_AsciiString VarName;
47   if (!IsDefined)
48   {
49     IsDefined = Standard_True;
50     OSD_Environment aTexDirEnv ("CSF_MDTVTexturesDirectory");
51     VarName = aTexDirEnv.Value();
52     if (VarName.IsEmpty())
53     {
54       OSD_Environment aCasRootEnv ("CASROOT");
55       VarName = aCasRootEnv.Value();
56       if (!VarName.IsEmpty())
57       {
58         VarName += "/src/Textures";
59       }
60     }
61
62     if (VarName.IsEmpty())
63     {
64       std::cerr << " CSF_MDTVTexturesDirectory and CASROOT not setted\n";
65       std::cerr << " one of these variable are mandatory to use this functionality\n";
66       Standard_Failure::Raise ("CSF_MDTVTexturesDirectory and CASROOT not setted");
67       return VarName;
68     }
69
70     const OSD_Path aDirPath (VarName);
71     OSD_Directory aDir (aDirPath);
72     const TCollection_AsciiString aTexture = VarName + "/2d_MatraDatavision.rgb";
73     OSD_File aTextureFile (aTexture);
74     if (!aDir.Exists() || !aTextureFile.Exists())
75     {
76       std::cerr << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted\n";
77       std::cerr << " not all files are found in : "<< VarName.ToCString() << std::endl;
78       Standard_Failure::Raise ("CSF_MDTVTexturesDirectory or CASROOT not correctly setted");
79       return VarName;
80     }
81   }
82   return VarName;
83 }
84
85 // =======================================================================
86 // function : Graphic3d_TextureRoot
87 // purpose  :
88 // =======================================================================
89 Graphic3d_TextureRoot::Graphic3d_TextureRoot (const TCollection_AsciiString& theFileName,
90                                               const Graphic3d_TypeOfTexture  theType)
91 : myParams (new Graphic3d_TextureParams()),
92   myPath   (theFileName),
93   myType   (theType)
94 {
95   myTexId = TCollection_AsciiString ("Graphic3d_TextureRoot_") //DynamicType()->Name()
96           + TCollection_AsciiString (Standard_Atomic_Increment (&THE_TEXTURE_COUNTER));
97 }
98
99 // =======================================================================
100 // function : Destroy
101 // purpose  :
102 // =======================================================================
103 void Graphic3d_TextureRoot::Destroy() const
104 {
105   //
106 }
107
108 // =======================================================================
109 // function : GetId
110 // purpose  :
111 // =======================================================================
112 TCollection_AsciiString Graphic3d_TextureRoot::GetId() const
113 {
114   return myTexId;
115 }
116
117 // =======================================================================
118 // function : GetParams
119 // purpose  :
120 // =======================================================================
121 const Handle(Graphic3d_TextureParams)& Graphic3d_TextureRoot::GetParams() const
122 {
123   return myParams;
124 }
125
126 // =======================================================================
127 // function : GetImage
128 // purpose  :
129 // =======================================================================
130 Handle(Image_PixMap) Graphic3d_TextureRoot::GetImage() const
131 {
132   TCollection_AsciiString aFilePath;
133   myPath.SystemName (aFilePath);
134   if (aFilePath.IsEmpty())
135   {
136     return Handle(Image_PixMap)();
137   }
138
139   Handle(Image_AlienPixMap) anImage = new Image_AlienPixMap();
140   if (!anImage->Load (aFilePath))
141   {
142     return Handle(Image_PixMap)();
143   }
144
145   return anImage;
146 }
147
148 // =======================================================================
149 // function : IsDone
150 // purpose  :
151 // =======================================================================
152 Standard_Boolean Graphic3d_TextureRoot::IsDone() const
153 {
154   OSD_File aTextureFile (myPath);
155   return aTextureFile.Exists();
156 }
157
158 // =======================================================================
159 // function : Path
160 // purpose  :
161 // =======================================================================
162 const OSD_Path& Graphic3d_TextureRoot::Path() const
163 {
164   return myPath;
165 }
166
167 // =======================================================================
168 // function : Type
169 // purpose  :
170 // =======================================================================
171 Graphic3d_TypeOfTexture Graphic3d_TextureRoot::Type() const
172 {
173   return myType;
174 }