glVertex  5.5.2
glvertex_vectortext.h
Go to the documentation of this file.
1 // (c) by Stefan Roettger, licensed under MIT license
2 
5 #ifndef GLVERTEX_VECTORTEXT_H
6 #define GLVERTEX_VECTORTEXT_H
7 
8 #include "glvertex_api.h"
9 
10 inline void lglRenderLine(float x1,float y1,float z1,float x2,float y2,float z2,
11  lglVBO *vbo=NULL)
12 {
13  if (vbo)
14  {
15  vbo->lglBegin(LGL_LINES);
16  vbo->lglVertex(x1,y1,z1);
17  vbo->lglVertex(x2,y2,z2);
18  vbo->lglEnd();
19  }
20  else
21  {
22  lglBegin(LGL_LINES);
23  lglVertex(x1,y1,z1);
24  lglVertex(x2,y2,z2);
25  lglEnd();
26  }
27 }
28 
29 inline void lglDrawSymbol(const char *symbol,
30  lglVBO *vbo=NULL)
31 {
32  float px,py,lx,ly;
33 
34  bool draw=true;
35 
36  px=py=0.0f;
37 
38  while (*symbol!='\0')
39  {
40  lx=px;
41  ly=py;
42 
43  switch (*symbol++)
44  {
45  case 'u': draw=false; break;
46  case 'd': draw=true; break;
47  case 'n': py+=1.0f; break;
48  case 's': py-=1.0f; break;
49  case 'e': px+=1.0f; break;
50  case 'w': px-=1.0f; break;
51  case 'N': py+=1.0f; px+=1.0f; break;
52  case 'S': py-=1.0f; px-=1.0f; break;
53  case 'E': px+=1.0f; py-=1.0f; break;
54  case 'W': px-=1.0f; py+=1.0f; break;
55  }
56 
57  if (draw)
58  if (px!=lx || py!=ly) lglRenderLine(lx,ly,0.0f,px,py,0.0f,vbo);
59  }
60 }
61 
62 inline void lglDrawLetter(char letter,
63  lglVBO *vbo=NULL)
64 {
65  lglPushMatrix();
66  lglScale(1.0f/4,1.0f/6,0.0f);
67 
68  switch (toupper(letter))
69  {
70  // letters occupy a 7x4 grid
71  case 'A': lglDrawSymbol("nnnnnNeEsssssunnndwww",vbo); break;
72  case 'B': lglDrawSymbol("nnnnnneeEsSwwueedEsSww",vbo); break;
73  case 'C': lglDrawSymbol("ueeNdSwWnnnnNeE",vbo); break;
74  case 'D': lglDrawSymbol("nnnnnneeEssssSww",vbo); break;
75  case 'E': lglDrawSymbol("ueeedwwwnnnnnneeeussswdww",vbo); break;
76  case 'F': lglDrawSymbol("nnnnnneeeussswdww",vbo); break;
77  case 'G': lglDrawSymbol("unnneedessSwWnnnnNeE",vbo); break;
78  case 'H': lglDrawSymbol("nnnnnnueeedssssssunnndwww",vbo); break;
79  case 'I': lglDrawSymbol("uedeeuwdnnnnnneuwdw",vbo); break;
80  case 'J': lglDrawSymbol("undEeNnnnnnwww",vbo); break;
81  case 'K': lglDrawSymbol("nnnnnnusssdNNNuSSSdEEE",vbo); break;
82  case 'L': lglDrawSymbol("ueeedwwwnnnnnn",vbo); break;
83  case 'M': lglDrawSymbol("nnnnnnEeNssssss",vbo); break;
84  case 'N': lglDrawSymbol("nnnnnnusdEEEssunndnnnn",vbo); break;
85  case 'O': lglDrawSymbol("uedWnnnnNeEssssSw",vbo); break;
86  case 'P': lglDrawSymbol("nnnnnneeEsSww",vbo); break;
87  case 'Q': lglDrawSymbol("uedWnnnnNeEssssSwuNdE",vbo); break;
88  case 'R': lglDrawSymbol("nnnnnneeEsSwwuedEEs",vbo); break;
89  case 'S': lglDrawSymbol("undEeNnWwWnNeE",vbo); break;
90  case 'T': lglDrawSymbol("ueednnnnnnwwueedee",vbo); break;
91  case 'U': lglDrawSymbol("unnnnnndsssssEeNnnnnn",vbo); break;
92  case 'V': lglDrawSymbol("unnnnnndsssssENNnnnn",vbo); break;
93  case 'W': lglDrawSymbol("unnnnnndssssssNeEnnnnnn",vbo); break;
94  case 'X': lglDrawSymbol("nnNNNnuwwwdsEEEss",vbo); break;
95  case 'Y': lglDrawSymbol("ueednnWWnnueeedsssS",vbo); break;
96  case 'Z': lglDrawSymbol("ueeendswwwnnNNNnwwws",vbo); break;
97  case '_': lglDrawSymbol("eee",vbo); break;
98  case '0': lglDrawSymbol("uedWnnnnNeEssssSwuNNdWWW",vbo); break;
99  case '1': lglDrawSymbol("ueednnnnnnSS",vbo); break;
100  case '2': lglDrawSymbol("ueeedwwwNNNnnWwSs",vbo); break;
101  case '3': lglDrawSymbol("undEeNnWwuedNnWwS",vbo); break;
102  case '4': lglDrawSymbol("ueednnnnnnuwwdssseee",vbo); break;
103  case '5': lglDrawSymbol("undEeNnWwwnnneee",vbo); break;
104  case '6': lglDrawSymbol("unndNeEsSwWnnnnNeE",vbo); break;
105  case '7': lglDrawSymbol("ueednnnnnnwwusssedee",vbo); break;
106  case '8': lglDrawSymbol("uedWnNWnNeEsSwuedEsSw",vbo); break;
107  case '9': lglDrawSymbol("undEeNnnnnWwSsEee",vbo); break;
108  case '.': lglDrawSymbol("uednesw",vbo); break;
109  case ',': lglDrawSymbol("uEdN",vbo); break;
110  case ':': lglDrawSymbol("unedneswunndnesw",vbo); break;
111  case ';': lglDrawSymbol("uneedwnesSunnndnesw",vbo); break;
112  case '?': lglDrawSymbol("ueednnnNnWwS",vbo); break;
113  case '!': lglDrawSymbol("ueednundnnnn",vbo); break;
114  case '|': lglDrawSymbol("ueednnnnnn",vbo); break;
115  case '-': lglDrawSymbol("unnnedee",vbo); break;
116  case '+': lglDrawSymbol("unnnedeeunwdss",vbo); break;
117  case '*': lglDrawSymbol("unnedNNuwwdEE",vbo); break;
118  case '/': lglDrawSymbol("undNNN",vbo); break;
119  case '>': lglDrawSymbol("unedNNWW",vbo); break;
120  case '<': lglDrawSymbol("uneeedWWNN",vbo); break;
121  case '=': lglDrawSymbol("unnedeeunndww",vbo); break;
122  case '(': lglDrawSymbol("ueedWnnnnN",vbo); break;
123  case ')': lglDrawSymbol("uedNnnnnW",vbo); break;
124  case '[': lglDrawSymbol("ueedwnnnnnne",vbo); break;
125  case ']': lglDrawSymbol("uedennnnnnw",vbo); break;
126  case '{': lglDrawSymbol("ueedwnnWNnne",vbo); break;
127  case '}': lglDrawSymbol("udennNWnnw",vbo); break;
128  case '$': lglDrawSymbol("unndEeNWwWNeEuWndssssssuwdnnnnnn",vbo); break;
129  case '%': lglDrawSymbol("undNNNusssdswneuwwnnndnwse",vbo); break;
130  case '#': lglDrawSymbol("unndeeeunndwwwuNdssssuednnnn",vbo); break;
131  case '&': lglDrawSymbol("ueeedWWWnnNEssSSseNN",vbo); break;
132  case '@': lglDrawSymbol("ueeendSwWnnnnNeEssswwnnee",vbo); break;
133  case '^': lglDrawSymbol("uennnndNE",vbo); break;
134  case '~': lglDrawSymbol("unnnndNEN",vbo); break;
135  case '"': lglDrawSymbol("uennnndnueds",vbo); break;
136  case '\'': lglDrawSymbol("uennnndn",vbo); break;
137  }
138 
139  lglPopMatrix();
140 }
141 
143 inline void lglDrawString(float width,
144  const char *str,
145  bool centered=true,
146  lglVBO *vbo=NULL)
147 {
148  const float linefeed=0.2f;
149 
150  int c,cmax,l;
151  float scale;
152  const char *ptr;
153 
154  if (str==NULL) return;
155 
156  for (c=0,cmax=l=1,ptr=str; *ptr!='\0'; ptr++)
157  {
158  if (*ptr!='\n') c++;
159  else {c=0; l++;}
160  if (c>cmax) cmax=c;
161  }
162 
163  scale=width/cmax;
164 
165  if (vbo) lglMatrixMode(LGL_PREMODEL);
166 
167  lglPushMatrix();
168  if (centered) lglTranslate(-0.5f,0.0f,0.0f);
169  lglScale(scale,scale,0.0f);
170  lglTranslate(0.0f,(l-1)*(1.0f+linefeed),0.0f);
171  if (centered) lglTranslate(0.0f,-l*(1.0f+linefeed)/2,0.0f);
172  lglPushMatrix();
173 
174  while (*str!='\0')
175  {
176  if (*str=='\n')
177  {
178  lglPopMatrix();
179  lglTranslate(0.0f,-(1.0f+linefeed),0.0f);
180  lglPushMatrix();
181  }
182  else
183  {
184  if (*str>='a' && *str<='z')
185  {
186  lglPushMatrix();
187  lglTranslate(0.2f,0.0f,0.0f);
188  lglScale(0.6f,0.75f,1.0f);
189 
190  lglDrawLetter(*str,vbo);
191 
192  lglPopMatrix();
193  }
194  else lglDrawLetter(*str,vbo);
195 
196  lglTranslate(1.0f,0.0f,0.0f);
197  }
198 
199  str++;
200  }
201 
202  lglPopMatrix();
203  lglPopMatrix();
204 
205  if (vbo) lglMatrixMode(LGL_MODELVIEW);
206 }
207 
208 #endif
lglEnd
void lglEnd()
end vertex series (as defined by OpenGL 1.2)
Definition: glvertex_api.h:54
lglPopMatrix
void lglPopMatrix()
pop matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:78
lglBegin
void lglBegin(lgl_primitive_enum primitive)
begin vertex series (as defined by OpenGL 1.2)
Definition: glvertex_api.h:18
lglTranslate
void lglTranslate(const vec4 &v)
multiply with translation matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:94
lglMatrixMode
void lglMatrixMode(lgl_matrixmode_enum mode=LGL_MODELVIEW)
specify matrix mode (as defined by OpenGL 1.2)
Definition: glvertex_api.h:58
lglVBO
LGL API: vbo class definition.
Definition: glvertex_core.h:5827
glvertex_api.h
lglPushMatrix
void lglPushMatrix()
push matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:74
scale
mat4 scale(const mat4 &m, const vec4 &c)
inline scale
Definition: glslmath.h:2591
lglScale
void lglScale(const vec4 &c)
multiply with scale matrix (as defined by OpenGL 1.2)
Definition: glvertex_api.h:82
lglVertex
void lglVertex(const vec4 &v)
specify vertex (as defined by OpenGL 1.2)
Definition: glvertex_api.h:22
lglDrawString
void lglDrawString(float width, const char *str, bool centered=true, lglVBO *vbo=NULL)
draw text string using vector graphics
Definition: glvertex_vectortext.h:143