Lines 15-26
Link Here
|
15 |
namespace OGL |
15 |
namespace OGL |
16 |
{ |
16 |
{ |
17 |
|
17 |
|
18 |
static const int CHAR_WIDTH = 8; |
18 |
static const int CHARACTER_WIDTH = 8; |
19 |
static const int CHAR_HEIGHT = 13; |
19 |
static const int CHARACTER_HEIGHT = 13; |
20 |
static const int CHAR_OFFSET = 32; |
20 |
static const int CHARACTER_OFFSET = 32; |
21 |
static const int CHAR_COUNT = 95; |
21 |
static const int CHARACTER_COUNT = 95; |
22 |
|
22 |
|
23 |
static const u8 rasters[CHAR_COUNT][CHAR_HEIGHT] = { |
23 |
static const u8 rasters[CHARACTER_COUNT][CHARACTER_HEIGHT] = { |
24 |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
24 |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
25 |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
25 |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
26 |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36}, |
26 |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36}, |
Lines 146-172
Link Here
|
146 |
glGenTextures(1, &texture); |
146 |
glGenTextures(1, &texture); |
147 |
glActiveTexture(GL_TEXTURE8); |
147 |
glActiveTexture(GL_TEXTURE8); |
148 |
glBindTexture(GL_TEXTURE_2D, texture); |
148 |
glBindTexture(GL_TEXTURE_2D, texture); |
149 |
std::vector<u32> texture_data(CHAR_WIDTH * CHAR_COUNT * CHAR_HEIGHT); |
149 |
std::vector<u32> texture_data(CHARACTER_WIDTH * CHARACTER_COUNT * CHARACTER_HEIGHT); |
150 |
for (int y = 0; y < CHAR_HEIGHT; y++) |
150 |
for (int y = 0; y < CHARACTER_HEIGHT; y++) |
151 |
{ |
151 |
{ |
152 |
for (int c = 0; c < CHAR_COUNT; c++) |
152 |
for (int c = 0; c < CHARACTER_COUNT; c++) |
153 |
{ |
153 |
{ |
154 |
for (int x = 0; x < CHAR_WIDTH; x++) |
154 |
for (int x = 0; x < CHARACTER_WIDTH; x++) |
155 |
{ |
155 |
{ |
156 |
bool pixel = (0 != (rasters[c][y] & (1 << (CHAR_WIDTH - x - 1)))); |
156 |
bool pixel = (0 != (rasters[c][y] & (1 << (CHARACTER_WIDTH - x - 1)))); |
157 |
texture_data[CHAR_WIDTH * CHAR_COUNT * y + CHAR_WIDTH * c + x] = pixel ? -1 : 0; |
157 |
texture_data[CHARACTER_WIDTH * CHARACTER_COUNT * y + CHARACTER_WIDTH * c + x] = pixel ? -1 : 0; |
158 |
} |
158 |
} |
159 |
} |
159 |
} |
160 |
} |
160 |
} |
161 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); |
161 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); |
162 |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, CHAR_WIDTH * CHAR_COUNT, CHAR_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture_data.data()); |
162 |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, CHARACTER_WIDTH * CHARACTER_COUNT, CHARACTER_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture_data.data()); |
163 |
|
163 |
|
164 |
// generate shader |
164 |
// generate shader |
165 |
ProgramShaderCache::CompileShader(s_shader, s_vertexShaderSrc, s_fragmentShaderSrc); |
165 |
ProgramShaderCache::CompileShader(s_shader, s_vertexShaderSrc, s_fragmentShaderSrc); |
166 |
s_shader.Bind(); |
166 |
s_shader.Bind(); |
167 |
|
167 |
|
168 |
// bound uniforms |
168 |
// bound uniforms |
169 |
glUniform2f(glGetUniformLocation(s_shader.glprogid,"charSize"), 1.0f / GLfloat(CHAR_COUNT), 1.0f); |
169 |
glUniform2f(glGetUniformLocation(s_shader.glprogid,"charSize"), 1.0f / GLfloat(CHARACTER_COUNT), 1.0f); |
170 |
uniform_color_id = glGetUniformLocation(s_shader.glprogid,"color"); |
170 |
uniform_color_id = glGetUniformLocation(s_shader.glprogid,"color"); |
171 |
glUniform4f(uniform_color_id, 1.0f, 1.0f, 1.0f, 1.0f); |
171 |
glUniform4f(uniform_color_id, 1.0f, 1.0f, 1.0f, 1.0f); |
172 |
uniform_offset_id = glGetUniformLocation(s_shader.glprogid, "offset"); |
172 |
uniform_offset_id = glGetUniformLocation(s_shader.glprogid, "offset"); |
Lines 196-203
Link Here
|
196 |
std::vector<GLfloat> vertices(text.length() * 6 * 4); |
196 |
std::vector<GLfloat> vertices(text.length() * 6 * 4); |
197 |
|
197 |
|
198 |
int usage = 0; |
198 |
int usage = 0; |
199 |
GLfloat delta_x = GLfloat(2 * CHAR_WIDTH) / GLfloat(bbWidth); |
199 |
GLfloat delta_x = GLfloat(2 * CHARACTER_WIDTH) / GLfloat(bbWidth); |
200 |
GLfloat delta_y = GLfloat(2 * CHAR_HEIGHT) / GLfloat(bbHeight); |
200 |
GLfloat delta_y = GLfloat(2 * CHARACTER_HEIGHT) / GLfloat(bbHeight); |
201 |
GLfloat border_x = 2.0f / GLfloat(bbWidth); |
201 |
GLfloat border_x = 2.0f / GLfloat(bbWidth); |
202 |
GLfloat border_y = 4.0f / GLfloat(bbHeight); |
202 |
GLfloat border_y = 4.0f / GLfloat(bbHeight); |
203 |
|
203 |
|
Lines 220-256
Link Here
|
220 |
continue; |
220 |
continue; |
221 |
} |
221 |
} |
222 |
|
222 |
|
223 |
if (c < CHAR_OFFSET || c >= CHAR_COUNT + CHAR_OFFSET) |
223 |
if (c < CHARACTER_OFFSET || c >= CHARACTER_COUNT + CHARACTER_OFFSET) |
224 |
continue; |
224 |
continue; |
225 |
|
225 |
|
226 |
vertices[usage++] = x; |
226 |
vertices[usage++] = x; |
227 |
vertices[usage++] = y; |
227 |
vertices[usage++] = y; |
228 |
vertices[usage++] = GLfloat(c - CHAR_OFFSET); |
228 |
vertices[usage++] = GLfloat(c - CHARACTER_OFFSET); |
229 |
vertices[usage++] = 0.0f; |
229 |
vertices[usage++] = 0.0f; |
230 |
|
230 |
|
231 |
vertices[usage++] = x + delta_x; |
231 |
vertices[usage++] = x + delta_x; |
232 |
vertices[usage++] = y; |
232 |
vertices[usage++] = y; |
233 |
vertices[usage++] = GLfloat(c - CHAR_OFFSET + 1); |
233 |
vertices[usage++] = GLfloat(c - CHARACTER_OFFSET + 1); |
234 |
vertices[usage++] = 0.0f; |
234 |
vertices[usage++] = 0.0f; |
235 |
|
235 |
|
236 |
vertices[usage++] = x + delta_x; |
236 |
vertices[usage++] = x + delta_x; |
237 |
vertices[usage++] = y + delta_y; |
237 |
vertices[usage++] = y + delta_y; |
238 |
vertices[usage++] = GLfloat(c - CHAR_OFFSET + 1); |
238 |
vertices[usage++] = GLfloat(c - CHARACTER_OFFSET + 1); |
239 |
vertices[usage++] = 1.0f; |
239 |
vertices[usage++] = 1.0f; |
240 |
|
240 |
|
241 |
vertices[usage++] = x; |
241 |
vertices[usage++] = x; |
242 |
vertices[usage++] = y; |
242 |
vertices[usage++] = y; |
243 |
vertices[usage++] = GLfloat(c - CHAR_OFFSET); |
243 |
vertices[usage++] = GLfloat(c - CHARACTER_OFFSET); |
244 |
vertices[usage++] = 0.0f; |
244 |
vertices[usage++] = 0.0f; |
245 |
|
245 |
|
246 |
vertices[usage++] = x + delta_x; |
246 |
vertices[usage++] = x + delta_x; |
247 |
vertices[usage++] = y + delta_y; |
247 |
vertices[usage++] = y + delta_y; |
248 |
vertices[usage++] = GLfloat(c - CHAR_OFFSET + 1); |
248 |
vertices[usage++] = GLfloat(c - CHARACTER_OFFSET + 1); |
249 |
vertices[usage++] = 1.0f; |
249 |
vertices[usage++] = 1.0f; |
250 |
|
250 |
|
251 |
vertices[usage++] = x; |
251 |
vertices[usage++] = x; |
252 |
vertices[usage++] = y + delta_y; |
252 |
vertices[usage++] = y + delta_y; |
253 |
vertices[usage++] = GLfloat(c - CHAR_OFFSET); |
253 |
vertices[usage++] = GLfloat(c - CHARACTER_OFFSET); |
254 |
vertices[usage++] = 1.0f; |
254 |
vertices[usage++] = 1.0f; |
255 |
|
255 |
|
256 |
x += delta_x + border_x; |
256 |
x += delta_x + border_x; |