- Timestamp:
- Nov 24, 2005, 8:24:52 PM (19 years ago)
- Location:
- trunk/src/lib/graphics
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/graphics/importer/texture.cc
r5755 r5768 66 66 { 67 67 if (this->image != NULL) 68 69 70 71 68 { 69 SDL_FreeSurface(this->image); 70 this->image = NULL; 71 } 72 72 if (this->texture != 0) 73 74 75 76 73 { 74 glDeleteTextures(1, &this->texture); 75 this->texture = 0; 76 } 77 77 if (imageName != NULL) 78 78 { … … 85 85 { 86 86 PRINTF(4)("loading Image %s\n", imageName); 87 this->image = this->prepareSurface(tmpSurf); 88 this->texture = loadTexToGL(this->image);87 if (this->prepareSurface(tmpSurf)) 88 loadTexToGL(); 89 89 SDL_FreeSurface(tmpSurf); 90 90 return true; … … 99 99 else 100 100 { 101 101 PRINTF(2)("Image-Name not specified\n"); 102 102 return false; 103 103 } … … 117 117 { 118 118 PRINTF(4)("Reloading Texture %s\n", this->getName()); 119 this-> texture = this->loadTexToGL(this->image);119 this->loadTexToGL(); 120 120 } 121 121 122 122 } 123 123 … … 127 127 * @returns a !!new!! Surface, that is loadable by openGL. 128 128 */ 129 SDL_Surface*Texture::prepareSurface(SDL_Surface* surface)129 bool Texture::prepareSurface(SDL_Surface* surface) 130 130 { 131 131 PRINTF(4)("Loading texture to OpenGL-Environment.\n"); 132 133 SDL_Surface *image;132 133 SDL_Surface* putSurface; 134 134 SDL_Rect area; 135 135 Uint32 saved_flags; 136 136 Uint8 saved_alpha; 137 138 image = SDL_CreateRGBSurface(SDL_SWSURFACE,139 140 137 138 putSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, 139 surface->w, surface->h, 140 32, 141 141 #if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */ 142 143 144 145 142 0x000000FF, 143 0x0000FF00, 144 0x00FF0000, 145 0xFF000000 146 146 #else 147 148 149 150 147 0xFF000000, 148 0x00FF0000, 149 0x0000FF00, 150 0x000000FF 151 151 #endif 152 ); 153 if ( image == NULL ) 154 return NULL; 155 152 ); 153 if ( putSurface == NULL ) 154 { 155 this->setSurface(NULL); 156 return false; 157 } 158 156 159 /* Save the alpha blending attributes */ 157 160 saved_flags = surface->flags&(SDL_SRCALPHA|SDL_RLEACCELOK); … … 160 163 SDL_SetAlpha(surface, 0, 0); 161 164 } 162 165 163 166 /* Copy the surface into the GL texture image */ 164 167 area.x = 0; … … 166 169 area.w = surface->w; 167 170 area.h = surface->h; 168 SDL_BlitSurface(surface, &area, image, &area);169 171 SDL_BlitSurface(surface, &area, putSurface, &area); 172 170 173 /* Restore the alpha blending attributes */ 171 if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA ) 172 { 173 SDL_SetAlpha(surface, saved_flags | SDL_OPENGL, saved_alpha); 174 this->bAlpha = true; 175 } 176 return image; 174 if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA ) 175 { 176 SDL_SetAlpha(surface, saved_flags | SDL_OPENGL, saved_alpha); 177 this->bAlpha = true; 178 } 179 180 return (this->setSurface(putSurface)); 181 } 182 183 bool Texture::setSurface(SDL_Surface* newSurface) 184 { 185 if (this->image != NULL) 186 SDL_FreeSurface(this->image); 187 188 this->image = newSurface; 189 190 return (this->image != NULL); 177 191 } 178 192 … … 183 197 * @returns The ID of the texture. 184 198 */ 185 GLuint Texture::loadTexToGL (SDL_Surface* surface) const 186 { 187 GLuint texture = 0; 199 GLuint Texture::loadTexToGL () 200 { 201 if (this->texture != 0 && glIsTexture(this->texture)) 202 glDeleteTextures(1, &this->texture); 203 this->texture = 0; 204 205 if (this->image == NULL) 206 return 0; 207 188 208 /* Create an OpenGL texture for the image */ 189 glGenTextures(1, &t exture);190 glBindTexture(GL_TEXTURE_2D, t exture);209 glGenTextures(1, &this->texture); 210 glBindTexture(GL_TEXTURE_2D, this->texture); 191 211 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 192 212 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 193 213 // build the Texture 194 214 glTexImage2D(GL_TEXTURE_2D, 195 196 197 surface->w, surface->h,198 199 200 201 surface->pixels);215 0, 216 GL_RGBA, 217 this->image->w, this->image->h, 218 0, 219 GL_RGBA, 220 GL_UNSIGNED_BYTE, 221 this->image->pixels); 202 222 // build the MipMaps 203 223 gluBuild2DMipmaps(GL_TEXTURE_2D, 204 205 surface->w,206 surface->h,207 208 209 surface->pixels);224 GL_RGBA, 225 this->image->w, 226 this->image->h, 227 GL_RGBA, 228 GL_UNSIGNED_BYTE, 229 this->image->pixels); 210 230 glBindTexture(GL_TEXTURE_2D, 0); 211 return t exture;212 } 231 return this->texture; 232 } -
trunk/src/lib/graphics/importer/texture.h
r5755 r5768 1 1 /*! 2 \file texture.h 3 \brief Contains the texture class, that handles the reading of Images into Texutre-files. 4 5 @todo procedural textures 6 */ 2 * @file texture.h 3 * @brief Contains the texture class, that handles the reading of Images into Texutre-files. 4 */ 7 5 8 6 #ifndef _TEXTURE_H 9 7 #define _TEXTURE_H 10 8 11 #include "glincl.h"12 9 #include "base_object.h" 13 10 14 #include " debug.h"11 #include "glincl.h" 15 12 13 /* Forward Declaration */ 16 14 struct SDL_Surface; 17 15 18 16 //! an enumerator for different procedural texture-types 19 17 typedef enum TEXTURE_TYPE { TEXTURE_RADIAL_ALIAS, 20 18 TEXTURE_NOISE }; 21 19 22 20 //! A Class, that reads in Textures from different fileformats. 23 class Texture : public BaseObject24 {25 public:26 Texture(const char* imageName = NULL);21 class Texture : public BaseObject 22 { 23 public: 24 Texture(const char* imageName = NULL); 27 25 // Texture(TEXTURE_TYPE type, int resolution); 28 ~Texture();26 ~Texture(); 29 27 30 bool loadImage(const char* imageName);31 bool rebuild();28 bool loadImage(const char* imageName); 29 bool rebuild(); 32 30 33 /** @returns The textureID of this texture. */34 inline GLuint getTexture() const { return this->texture; };35 /** @returns true if texture has alpha, false otherwise */36 inline bool hasAlpha() const {return bAlpha;}31 /** @returns The textureID of this texture. */ 32 inline GLuint getTexture() const { return this->texture; }; 33 /** @returns true if texture has alpha, false otherwise */ 34 inline bool hasAlpha() const {return bAlpha;} 37 35 38 private:39 SDL_Surface*prepareSurface(SDL_Surface* input);40 GLuint loadTexToGL (SDL_Surface* surface) const;36 protected: 37 bool prepareSurface(SDL_Surface* input); 38 bool setSurface(SDL_Surface* newSurface); 41 39 42 private: 43 GLuint texture; //!< The Texture-ID of opengl from this Texture. 44 bool bAlpha; //!< if the texture has an alpha channel. 45 SDL_Surface* image; 46 }; 40 GLuint loadTexToGL (); 41 42 private: 43 GLuint texture; //!< The Texture-ID of opengl from this Texture. 44 bool bAlpha; //!< if the texture has an alpha channel. 45 SDL_Surface* image; //!< The SDL_Surfce that stores the Texture on it. 46 }; 47 47 48 48 #endif /* _TEXTURE_H */ -
trunk/src/lib/graphics/text_engine/font.cc
r5427 r5768 132 132 this->fontTTF = NULL; 133 133 this->glyphArray = NULL; 134 this->fastTextureID = 0;135 134 } 136 135 … … 149 148 this->fontTTF = NULL; 150 149 } 151 if (this->fastTextureID != 0) 152 { 153 if(glIsTexture(this->fastTextureID)) 154 glDeleteTextures(1, &this->fastTextureID); 155 this->fastTextureID = 0; 156 } 150 157 151 158 152 this->setName(fontFile); … … 161 155 if(this->fontTTF != NULL) 162 156 { 163 this->fastTextureID = this->createFastTexture(); 164 if (this->fastTextureID != 0) 165 return true; 166 else 167 return false; 157 this->createFastTexture(); 158 return (this->getTexture() != 0); 168 159 } 169 160 else … … 190 181 this->fontTTF = NULL; 191 182 } 192 if (this->fastTextureID != 0) 193 { 194 if(glIsTexture(this->fastTextureID)) 195 glDeleteTextures(1, &this->fastTextureID); 196 this->fastTextureID = 0; 197 } 198 199 this->fastTextureID = Text::loadTexture(surface, NULL); 183 if (this->prepareSurface(surface)) 184 this->loadTexToGL( ); 200 185 201 186 // initializing the Glyphs. … … 251 236 Font* Font::defaultFont = NULL; 252 237 238 /** 239 * creates and exports an Image, that has all the characters 240 * stored in a Array (as an image) 241 * @param fileName the File to write the image into. 242 */ 253 243 void Font::createAsciiImage(const char* fileName) 254 244 { … … 400 390 * creates a Fast-Texture of this Font 401 391 */ 402 GLuintFont::createFastTexture()392 bool Font::createFastTexture() 403 393 { 404 394 /* interesting GLYPHS: … … 500 490 // SDL_SaveBMP(tmpSurf, outName); 501 491 502 GLuint texture; 503 glGenTextures(1, &texture); 504 glBindTexture(GL_TEXTURE_2D, texture); 505 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 506 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 507 glTexImage2D(GL_TEXTURE_2D, 508 0, 509 GL_RGBA, 510 tmpSurf->w, tmpSurf->h, 511 0, 512 GL_RGBA, 513 GL_UNSIGNED_BYTE, 514 tmpSurf->pixels); 515 SDL_FreeSurface(tmpSurf); 516 return texture; 492 if (this->setSurface(tmpSurf)) 493 loadTexToGL(); 517 494 } 518 495 -
trunk/src/lib/graphics/text_engine/font.h
r5767 r5768 11 11 #define _FONT_H 12 12 13 #include " base_object.h"13 #include "texture.h" 14 14 15 15 #include "glincl.h" … … 52 52 53 53 //! A class to handle a Font of a certain ttf-File/image-file, Size. 54 class Font : public BaseObject54 class Font : public Texture 55 55 { 56 56 public: … … 63 63 void init(); 64 64 65 // font65 // font 66 66 bool loadFontFromTTF(const char* fontFile); 67 67 bool loadFontFromSDL_Surface(SDL_Surface* surface); … … 71 71 /** @returns a Pointer to the Array of Glyphs */ 72 72 inline Glyph** getGlyphArray() const { return this->glyphArray; }; 73 /** @returns the texture to the fast-texture */ 74 inline GLuint getFastTextureID() const { return this->fastTextureID; }; 73 /** @returns the a pointer to the TTF */ 74 inline TTF_Font* getTTF() const { return this->fontTTF; }; 75 76 75 77 /** @returns the default Font */ 76 78 inline static Font* getDefaultFont() { if (Font::defaultFont == NULL) initDefaultFont(); return Font::defaultFont; }; 77 /** @returns the a pointer to the TTF */78 inline TTF_Font* getTTF() const { return this->fontTTF; };79 79 80 80 void createAsciiImage(const char* fileName); 81 81 static void initDefaultFont(); 82 82 static void removeDefaultFont(); 83 84 83 85 84 private: … … 89 88 Glyph* getGlyphMetrics(Uint16 character); 90 89 91 GLuintcreateFastTexture();90 bool createFastTexture(); 92 91 93 92 void initGlyphs(Uint16 from, Uint16 count); … … 104 103 105 104 Glyph** glyphArray; //!< An Array of all the Glyphs stored in the Array of Glyphs. 106 GLuint fastTextureID; //!< The fast textureID.107 105 }; 108 106 -
trunk/src/lib/graphics/text_engine/text.cc
r5767 r5768 38 38 if (fontFile != NULL) 39 39 this->setFont(fontFile, FONT_DEFAULT_RENDER_SIZE); 40 this->setSizeY2D(t his->size = textSize);40 this->setSizeY2D(textSize); 41 41 } 42 42 … … 69 69 this->blending = TEXT_DEFAULT_BLENDING; 70 70 this->color = TEXT_DEFAULT_COLOR; 71 this->size = TEXT_DEFAULT_SIZE; 72 71 this->setSize(TEXT_DEFAULT_SIZE); 73 72 this->setText(NULL); 74 73 } … … 182 181 { 183 182 glyphArray = this->font->getGlyphArray(); 184 glBindTexture(GL_TEXTURE_2D, font->get FastTextureID());183 glBindTexture(GL_TEXTURE_2D, font->getTexture()); 185 184 } 186 185 else … … 189 188 Font::initDefaultFont(); 190 189 glyphArray = Font::getDefaultFont()->getGlyphArray(); 191 glBindTexture(GL_TEXTURE_2D, Font::getDefaultFont()->get FastTextureID());190 glBindTexture(GL_TEXTURE_2D, Font::getDefaultFont()->getTexture()); 192 191 } 193 192 const char* tmpText = this->externText; … … 210 209 211 210 glTexCoord2f(tmpGlyph->texCoord[0], tmpGlyph->texCoord[3]); 212 glVertex2d(posX, this-> size);211 glVertex2d(posX, this->getSizeY2D()); 213 212 214 213 glTexCoord2f(tmpGlyph->texCoord[1], tmpGlyph->texCoord[3]); 215 glVertex2d(posX+tmpGlyph->width*this-> size, this->size);214 glVertex2d(posX+tmpGlyph->width*this->getSizeY2D(), this->getSizeY2D()); 216 215 217 216 glTexCoord2f(tmpGlyph->texCoord[1], tmpGlyph->texCoord[2]); 218 glVertex2d(posX+tmpGlyph->width*this-> size, 0);217 glVertex2d(posX+tmpGlyph->width*this->getSizeY2D(), 0); 219 218 220 219 glEnd(); 221 220 glEndList(); 222 posX += tmpGlyph->advance * this-> size;221 posX += tmpGlyph->advance * this->getSizeY2D(); 223 222 } 224 223 ++tmpText; -
trunk/src/lib/graphics/text_engine/text.h
r5767 r5768 54 54 void setColor(float r, float g, float b) { this->color = Vector(r, g, b); }; 55 55 /** sets the Size of the Font */ 56 void setSize(float size) { this->setSizeY2D( this->size =size); };56 void setSize(float size) { this->setSizeY2D(size); }; 57 57 /** @returns the Size of the Text */ 58 58 // void getSize(float &x, float& y) const { return this->size; }; … … 73 73 Vector color; //!< The color of the font. 74 74 float blending; //!< The blending intensity. 75 float size; //!< The size of the Font.76 75 }; 77 76
Note: See TracChangeset
for help on using the changeset viewer.