source: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/glfont2.cpp @ 2826

Revision 2826, 5.6 KB checked in by mattausch, 16 years ago (diff)

changed font

Line 
1//*******************************************************************
2//glfont2.cpp -- glFont Version 2.0 implementation
3//Copyright (c) 1998-2002 Brad Fish
4//See glfont.html for terms of use
5//May 14, 2002
6//*******************************************************************
7
8//STL headers
9#include <string>
10#include <utility>
11#include <iostream>
12#include <fstream>
13using namespace std;
14
15//OpenGL headers
16#include "glInterface.h"
17
18//glFont header
19#include "glfont2.h"
20using namespace glfont;
21
22//*******************************************************************
23//GLFont Class Implementation
24//*******************************************************************
25GLFont::GLFont ()
26{
27        //Initialize header to safe state
28        header.tex = -1;
29        header.tex_width = 0;
30        header.tex_height = 0;
31        header.start_char = 0;
32        header.end_char = 0;
33        header.chars = NULL;
34}
35//*******************************************************************
36GLFont::~GLFont ()
37{
38        //Destroy the font
39        Destroy();
40}
41//*******************************************************************
42bool GLFont::Create (const char *file_name, int tex)
43{
44        ifstream input;
45        int num_chars, num_tex_bytes;
46        char *tex_bytes;
47
48        //Destroy the old font if there was one, just to be safe
49        Destroy();
50
51        //Open input file
52        input.open(file_name, ios::in | ios::binary);
53        if (!input)
54                return false;
55
56        //Read the header from file
57        input.read((char *)&header, sizeof(header));
58        header.tex = tex;
59
60        //Allocate space for character array
61        num_chars = header.end_char - header.start_char + 1;
62        if ((header.chars = new GLFontChar[num_chars]) == NULL)
63                return false;
64
65        //Read character array
66        input.read((char *)header.chars, sizeof(GLFontChar) *
67                num_chars);
68
69        //Read texture pixel data
70        num_tex_bytes = header.tex_width * header.tex_height * 2;
71        tex_bytes = new char[num_tex_bytes];
72        input.read(tex_bytes, num_tex_bytes);
73
74        //Create OpenGL texture
75        glBindTexture(GL_TEXTURE_2D, tex); 
76        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
77        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
78        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
79        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
80        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
81        glTexImage2D(GL_TEXTURE_2D, 0, 2, header.tex_width,
82                header.tex_height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE,
83                (void *)tex_bytes);
84
85        //Free texture pixels memory
86        delete[] tex_bytes;
87
88        //Close input file
89        input.close();
90
91        //Return successfully
92        return true;
93}
94//*******************************************************************
95bool GLFont::Create (const std::string &file_name, int tex)
96{
97        return Create(file_name.c_str(), tex);
98}
99//*******************************************************************
100void GLFont::Destroy (void)
101{
102        //Delete the character array if necessary
103        if (header.chars)
104        {
105                delete[] header.chars;
106                header.chars = NULL;
107        }
108}
109//*******************************************************************
110void GLFont::GetTexSize (std::pair<int, int> *size)
111{
112        //Retrieve texture size
113        size->first = header.tex_width;
114        size->second = header.tex_height;
115}
116//*******************************************************************
117int GLFont::GetTexWidth (void)
118{
119        //Return texture width
120        return header.tex_width;
121}
122//*******************************************************************
123int GLFont::GetTexHeight (void)
124{
125        //Return texture height
126        return header.tex_height;
127}
128//*******************************************************************
129void GLFont::GetCharInterval (std::pair<int, int> *interval)
130{
131        //Retrieve character interval
132        interval->first = header.start_char;
133        interval->second = header.end_char;
134}
135//*******************************************************************
136int GLFont::GetStartChar (void)
137{
138        //Return start character
139        return header.start_char;
140}
141//*******************************************************************
142int GLFont::GetEndChar (void)
143{
144        //Return end character
145        return header.end_char;
146}
147//*******************************************************************
148void GLFont::GetCharSize (int c, std::pair<int, int> *size)
149{
150        //Make sure character is in range
151        if (c < header.start_char || c > header.end_char)
152        {
153                //Not a valid character, so it obviously has no size
154                size->first = 0;
155                size->second = 0;
156        }
157        else
158        {
159                GLFontChar *glfont_char;
160
161                //Retrieve character size
162                glfont_char = &header.chars[c - header.start_char];
163                size->first = (int)(glfont_char->dx * header.tex_width);
164                size->second = (int)(glfont_char->dy *
165                        header.tex_height);
166        }
167}
168//*******************************************************************
169int GLFont::GetCharWidth (int c)
170{
171        //Make sure in range
172        if (c < header.start_char || c > header.end_char)
173                return 0;
174        else
175        {
176                GLFontChar *glfont_char;
177               
178                //Retrieve character width
179                glfont_char = &header.chars[c - header.start_char];
180                return (int)(glfont_char->dx * header.tex_width);
181        }
182}
183//*******************************************************************
184int GLFont::GetCharHeight (int c)
185{
186        //Make sure in range
187        if (c < header.start_char || c > header.end_char)
188                return 0;
189        else
190        {
191                GLFontChar *glfont_char;
192
193                //Retrieve character height
194                glfont_char = &header.chars[c - header.start_char];
195                return (int)(glfont_char->dy * header.tex_height);
196        }
197}
198//*******************************************************************
199void GLFont::Begin (void)
200{
201        //Bind to font texture
202        glBindTexture(GL_TEXTURE_2D, header.tex);
203}
204//*******************************************************************
205
206//End of file
207
Note: See TracBrowser for help on using the repository browser.