texturefont.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // texturefont.h
  2. //
  3. // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _TEXTUREFONT_H_
  10. #define _TEXTUREFONT_H_
  11. #include <vector>
  12. #include <string>
  13. #include <iostream>
  14. #include <celutil/basictypes.h>
  15. class TextureFont
  16. {
  17.  public:
  18.     TextureFont();
  19.     ~TextureFont();
  20.     void render(wchar_t) const;
  21.     void render(const std::string&) const;
  22.     int getWidth(const std::string&) const;
  23.     int getWidth(int c) const;
  24.     int getMaxWidth() const;
  25.     int getHeight() const;
  26.     int getMaxAscent() const;
  27.     void setMaxAscent(int);
  28.     int getMaxDescent() const;
  29.     void setMaxDescent(int);
  30.     int getTextureName() const;
  31.     void bind();
  32.     bool buildTexture();
  33.  public:
  34.     struct TexCoord
  35.     {
  36.         float u, v;
  37.     };
  38.     struct Glyph
  39.     {
  40.         Glyph(unsigned short _id) : __id(_id) {};
  41.         unsigned short __id;
  42.         unsigned short width;
  43.         unsigned short height;
  44.         short x;
  45.         short xoff;
  46.         short y;
  47.         short yoff;
  48.         short advance;
  49.         TexCoord texCoords[4];
  50.     };
  51.     enum {
  52.         TxfByte = 0,
  53.         TxfBitmap = 1,
  54.     };
  55.  private:
  56.     void addGlyph(const Glyph&);
  57.     const TextureFont::Glyph* getGlyph(wchar_t) const;
  58.     void rebuildGlyphLookupTable();
  59.  private:
  60.     int maxAscent;
  61.     int maxDescent;
  62.     int maxWidth;
  63.     int texWidth;
  64.     int texHeight;
  65.     unsigned char* fontImage;
  66.     unsigned int texName;
  67.     std::vector<Glyph> glyphs;
  68.     const Glyph** glyphLookup;
  69.     unsigned int glyphLookupTableSize;
  70.  public:
  71.     static TextureFont* load(std::istream& in);
  72. };
  73. TextureFont* LoadTextureFont(const std::string&);
  74. #endif // _TEXTUREFONT_H_