TextureData.hh 6.62 KB
Newer Older
Jan Möbius's avatar
Jan Möbius committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  OpenFlipper is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision: 5183 $
//   $Author: wilden $
//   $Date: 2009-03-03 12:51:24 +0100 (Tue, 03 Mar 2009) $
//
//=============================================================================

32
33
34
#ifndef TEXTUREDATA_HH
#define TEXTUREDATA_HH

Jan Möbius's avatar
Jan Möbius committed
35
36
37
#include <OpenFlipper/common/perObjectData.hh>

#include <QString>
38
#include <QStringList>
39
#include <QImage>
40
#include <ACG/GL/gl.hh>
Jan Möbius's avatar
Jan Möbius committed
41
42
#include <vector>
#include <map>
43
44
#include <float.h>
#include <iostream>
Jan Möbius's avatar
Jan Möbius committed
45

46
47
48
49
enum TextureType { UNSET         = 1 << 0,
                   VERTEXBASED   = 1 << 1,
                   HALFEDGEBASED = 1 << 2,
                   MULTITEXTURE  = 1 << 3 };
Jan Möbius's avatar
Jan Möbius committed
50

51
52
53
54
55
56
57
58
59
60
61
class TexParameters
{
  public:
    TexParameters() :
          scale ( true ),
          clamp_min ( FLT_MIN ),
          clamp_max ( FLT_MAX ),
          clamp ( false ),
          repeat ( false ),
          center ( false ),
          abs ( false ),
62
          max_val ( 1.0 ) {};
63
64
65
66
67

    bool scale;

    double clamp_min;
    double clamp_max;
Jan Möbius's avatar
Jan Möbius committed
68

69
70
    bool clamp;
    bool repeat;
Jan Möbius's avatar
Jan Möbius committed
71

72
    bool center;
Jan Möbius's avatar
Jan Möbius committed
73

74
    bool abs;
Jan Möbius's avatar
Jan Möbius committed
75

76
    double max_val;
Jan Möbius's avatar
Jan Möbius committed
77
78
};

79
80
81
82
class Texture {
  public :
    Texture();

83

84
85
86
    void filename( QString _name ) { filename_ = _name; };
    QString filename() { return filename_; };

87

88
89
90
    void id( int _id ) { id_ = _id; };
    int id() { return id_; };

91

92
93
94
    void glName( GLuint _glName ) { glName_ = _glName; };
    GLuint glName() { return glName_; };

95

96
97
98
    void name( QString _name ) { name_ = _name; };
    QString name() { return name_; };

99

100
101
102
    void dimension( uint _dimension ) { dimension_ = _dimension; };
    uint dimension( ) { return dimension_; };

103

104
105
106
107
108
    void enabled( bool _enabled ) { enabled_ = _enabled; };
    bool enabled() { return enabled_; };
    void enable(){ enabled_ = true; };
    void disable(){ enabled_ = false; };

109
110
111
112
113
114
115
116
    void hidden( bool _hidden ) { hidden_ = _hidden; };
    bool hidden() { return hidden_; };
    void hide() { hidden_ = true; };

    void dirty( bool _dirty ) { dirty_ = _dirty; };
    bool dirty() { return dirty_; };
    void clean() { dirty_ = false; };
    void setDirty() { dirty_ = true; };
117
118


119
120
    void type( TextureType _type ) { type_ = _type; };
    TextureType type( ) { return type_; };
121

122

123
124
125
126
127
128
129
130
131
132
133
134
    QString indexMappingProperty() { return indexMappingProperty_; };
    void indexMappingProperty( QString _property ) { indexMappingProperty_ = _property; };


    /// Parameters of the texture
    TexParameters parameters;

    /// The image used as the texture
    QImage textureImage;

    /// If this is a multiTexture, the list will contain all textures for this multi Texture node.
    QStringList multiTextureList;
135

136
  private:
137
138
139
140
    /// Texture Name
    QString name_;

    /// Filename of the texture
141
142
    QString filename_;

143
    /// Texture id
144
145
    int id_;

146
    /// glName
147
148
    GLuint glName_;

149
    /// dimension
150
151
    uint dimension_;

152
    /// Status
153
154
    bool enabled_;

155
    /// Hidden flag ( If this texture belongs to a multitexture, it will be hidden in the context menu )
156
157
    bool hidden_;

158
159
160
161
    /// does this texture need an update?
    bool dirty_;

    /// Texture Type
162
    TextureType type_;
163
164
165
166
167
168

    /** If this is a multiTexture, indexMappingProperty_ will point to the property storing the mapping
     * Defaults to the f:textureindex
    */
    QString indexMappingProperty_;

Jan Möbius's avatar
Jan Möbius committed
169
170
171
172
173
174
175
};

class TextureData : public PerObjectData
{

  public :

176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
      /// Constructor
      TextureData();
      /// Destructor
      ~TextureData();


      /// Check if a texture exists
      bool textureExists(QString _textureName);


      /// Check if a texture is enabled
      bool isEnabled(QString _textureName);


      /// Enable a given texture
      bool enableTexture(QString _textureName, bool _exclusive = false);

      /// Disable a given texture
      void disableTexture(QString _textureName);

      /// Add a Texture
      int addTexture ( QString _textureName , QString _filename , uint _dimension, GLuint _glName );

      /// Add a Texture ( Based on an existing specification )
      int addTexture ( Texture _texture, GLuint _glName );

202
203
204
      /// Adds a new multiTexture ( This texture will only contain a list of enabled textures for multitexturing )
      bool addMultiTexture( QString _textureName );

205
206
207
      /// Stores the given image in the texture information
      bool setImage( QString _textureName , QImage& _image );

208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
      /*
      /// Delete a given texture
      void deleteTexture(QString _textureName);

      /// get parameters of a given texture
      TexParameters textureParameters(QString _textureName);

      /// Set Parameters for a given texture
      void setTextureParameters(QString _textureName, TexParameters _params);
      */

      /// Get the texture object
      Texture& texture(QString _textureName);

      /// Get reference to the texture vector
      std::vector< Texture >& textures();


226
227
228
229
230
      /** This map maps all available textures for the object which this
       *  class belongs to to their GLuint. The MeshNode will use this
       *  map to activate one texture for each face.
       *
       */
231
232
      std::map< int, GLuint >* textureMap();

233
234
235
    /** This map is used to store the available Textures and map them to their
     *  corresponding properties.
     */
236
237
      std::map< int, std::string >* propertyMap();

Jan Möbius's avatar
Jan Möbius committed
238
239
240
241
242
  private :

    std::map< int, GLuint> textureMap_;
    std::map< int, std::string> propertyMap_;

243
    /// internal id for the next texture
Jan Möbius's avatar
Jan Möbius committed
244
245
    int nextInternalID_;

246

247
    /// vector containing all textures of an object
Jan Möbius's avatar
Jan Möbius committed
248
249
    std::vector< Texture > textures_;

250

251
    /// Get the index of a given texture
Jan Möbius's avatar
Jan Möbius committed
252
253
    int getTextureIndex(QString _textureName);

254
255
    Texture noTexture;

Jan Möbius's avatar
Jan Möbius committed
256
257
};

258
#endif //TEXTUREDATA_HH