1 | typedef struct { |
1 | typedef struct { |
2 | GLenum mode; |
2 | GLenum mode; |
3 | GLenum format; // 0, GL_T2F_V3F, GL_V2F |
3 | GLenum format; // 0, GL_T2F_V3F, GL_V2F |
4 | GLint texname; |
4 | GLuint texname; |
5 | unsigned char r, g, b, a; |
5 | unsigned char r, g, b, a; |
6 | } rc_key_t; |
6 | } rc_key_t; |
7 | |
7 | |
8 | typedef struct { |
8 | typedef struct { |
9 | HV *hv; |
9 | HV *hv; |
… | |
… | |
78 | static void |
78 | static void |
79 | rc_glyph (rc_array_t *arr, int u, int v, int w, int h, int x, int y) |
79 | rc_glyph (rc_array_t *arr, int u, int v, int w, int h, int x, int y) |
80 | { |
80 | { |
81 | U8 *c; |
81 | U8 *c; |
82 | STRLEN len = SvCUR (arr); |
82 | STRLEN len = SvCUR (arr); |
|
|
83 | SvGROW (arr, len + 2 * 2 + 1 * 4); |
|
|
84 | c = (U8 *)SvEND (arr); |
83 | |
85 | |
84 | SvGROW (arr, len + 2 * 2 + 1 * 4); |
86 | x += w; |
|
|
87 | y += h; |
85 | |
88 | |
86 | c = (U8 *)SvEND (arr); |
|
|
87 | *c++ = u; |
89 | *c++ = u; |
88 | *c++ = v; |
90 | *c++ = v; |
89 | *c++ = w; |
91 | *c++ = w; |
90 | *c++ = h; |
92 | *c++ = h; |
91 | |
93 | |
… | |
… | |
150 | h = *c++; |
152 | h = *c++; |
151 | |
153 | |
152 | x = *c++; if (x > 0x7f) x = ((x & 0x7f) << 7) | *c++; |
154 | x = *c++; if (x > 0x7f) x = ((x & 0x7f) << 7) | *c++; |
153 | y = *c++; if (y > 0x7f) y = ((y & 0x7f) << 7) | *c++; |
155 | y = *c++; if (y > 0x7f) y = ((y & 0x7f) << 7) | *c++; |
154 | |
156 | |
|
|
157 | x -= w; |
|
|
158 | y -= h; |
|
|
159 | |
155 | glTexCoord2f ( u * (1.f / TC_WIDTH), v * (1.f / TC_HEIGHT)); glVertex2i (x , y ); |
160 | glTexCoord2f ( u * (1.f / TC_WIDTH), v * (1.f / TC_HEIGHT)); glVertex2i (x , y ); |
156 | glTexCoord2f ((u + w) * (1.f / TC_WIDTH), v * (1.f / TC_HEIGHT)); glVertex2i (x + w, y ); |
161 | glTexCoord2f ((u + w) * (1.f / TC_WIDTH), v * (1.f / TC_HEIGHT)); glVertex2i (x + w, y ); |
157 | glTexCoord2f ((u + w) * (1.f / TC_WIDTH), (v + h) * (1.f / TC_HEIGHT)); glVertex2i (x + w, y + h); |
162 | glTexCoord2f ((u + w) * (1.f / TC_WIDTH), (v + h) * (1.f / TC_HEIGHT)); glVertex2i (x + w, y + h); |
158 | glTexCoord2f ( u * (1.f / TC_WIDTH), (v + h) * (1.f / TC_HEIGHT)); glVertex2i (x , y + h); |
163 | glTexCoord2f ( u * (1.f / TC_WIDTH), (v + h) * (1.f / TC_HEIGHT)); glVertex2i (x , y + h); |
159 | } |
164 | } |