Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/water/src/lib/graphics/importer/texture.h @ 7783

Last change on this file since 7783 was 7783, checked in by bensch, 18 years ago

orxonox/trunk: image-data splitted out of Texture

File size: 3.1 KB
Line 
1/*!
2 * @file texture.h
3 * @brief Contains the texture class, that handles the reading of Images into Texutre-files.
4 */
5
6#ifndef _TEXTURE_H
7#define _TEXTURE_H
8
9#include "base_object.h"
10
11#include "glincl.h"
12#include "count_pointer.h"
13
14/* Forward Declaration */
15struct SDL_Surface;
16
17
18class TextureData
19{
20  public:
21    TextureData();
22    ~TextureData();
23
24    inline GLuint getTexture() const { return this->texture; };
25    /** @returns true if texture has alpha, false otherwise */
26    inline bool hasAlpha() const  {return this->bAlpha; }
27    /** @returns the stored image of this Texture */
28    const SDL_Surface* const getStoredImage() const { return this->image; };
29
30    bool loadSurface(SDL_Surface* surface, GLenum target = GL_TEXTURE_2D);
31
32
33
34    bool rebuild();
35
36    bool setSurface(SDL_Surface* newSurface);
37    bool setAlpha(bool hasAlpha) { this->bAlpha = hasAlpha; };
38    bool setTexture(GLuint texture);
39
40  private:
41    GLuint           texture;            //!< The Texture-ID of opengl from this Texture.
42    bool             bAlpha;             //!< if the texture has an alpha channel.
43    SDL_Surface*     image;              //!< The SDL_Surfce that stores the Texture on it.
44};
45
46
47//! A Class, that reads in Textures from different fileformats.
48class Texture : public BaseObject
49{
50public:
51
52public:
53  Texture(GLenum target = GL_TEXTURE_2D);
54  Texture(const std::string& imageName, GLenum target = GL_TEXTURE_2D);
55  Texture(SDL_Surface* surface, GLenum target = GL_TEXTURE_2D);
56
57  virtual ~Texture();
58
59  bool loadImage(const std::string& imageName, GLenum target = GL_TEXTURE_2D);
60  bool loadSurface(SDL_Surface* surface, GLenum target = GL_TEXTURE_2D);
61  virtual bool rebuild();
62
63  /** @returns The textureID of this texture.  */
64  inline GLuint getTexture() const { return this->data->getTexture(); };
65  /** @returns true if texture has alpha, false otherwise */
66  inline bool hasAlpha() const  { return this->data->hasAlpha(); }
67  /** @returns the stored image of this Texture */
68  const SDL_Surface* const getStoredImage() const { return this->data->getStoredImage(); };
69
70
71
72  static void setTextureEnableState(bool texturesEnabled);
73  /** @returns true if Textures are enabled */
74  inline static bool getTextureEnableState() { return Texture::texturesEnabled; };
75
76  // Utility functionality:
77  static SDL_Surface* prepareSurface(SDL_Surface* input, bool& hasAlpha);
78  static GLuint loadTexToGL (const SDL_Surface* surface, GLenum target = GL_TEXTURE_2D);
79
80
81protected:
82  bool setSurface(SDL_Surface* newSurface) { return this->data->setSurface(newSurface); };
83  bool setAlpha(bool hasAlpha) { return this->data->setAlpha(hasAlpha); };
84  bool setTexture(GLuint texture) { return this->data->setTexture(texture); };
85
86private:
87  void init();
88  static void generateTexture(GLuint& texture, GLenum target);
89
90private:
91  CountPointer<TextureData>     data;               //!< The TextureData
92  GLclampf                      priority;           //!< the priority of the current texture (used for garphics cards with limited mem)
93
94  static bool                   texturesEnabled;    //!< If the Textures are enabled.
95};
96
97#endif /* _TEXTURE_H */
Note: See TracBrowser for help on using the repository browser.