text rendering over vertex arrays, rework fully done, finally
This commit is contained in:
@ -401,19 +401,20 @@ bool push_text_payload_to_vertex_buffer_builder(struct font_data const *font_dat
|
||||
stbtt_aligned_quad quad)
|
||||
{
|
||||
(void)font_data;
|
||||
(void)builder;
|
||||
|
||||
/* TODO: use vertex arrays */
|
||||
glTexCoord2f(quad.s0, quad.t0);
|
||||
glVertex2f(quad.x0, quad.y0);
|
||||
glTexCoord2f(quad.s1, quad.t0);
|
||||
glVertex2f(quad.x1, quad.y0);
|
||||
glTexCoord2f(quad.s1, quad.t1);
|
||||
glVertex2f(quad.x1, quad.y1);
|
||||
glTexCoord2f(quad.s0, quad.t1);
|
||||
glVertex2f(quad.x0, quad.y1);
|
||||
struct element_indexed_quad_without_color buffer_element = {
|
||||
.v0 = (t_fvec2){ quad.x0, quad.y0 },
|
||||
.v1 = (t_fvec2){ quad.x1, quad.y0 },
|
||||
.v2 = (t_fvec2){ quad.x1, quad.y1 },
|
||||
.v3 = (t_fvec2){ quad.x0, quad.y1 },
|
||||
|
||||
return false;
|
||||
.uv0 = (t_fvec2){ quad.s0, quad.t0 },
|
||||
.uv1 = (t_fvec2){ quad.s1, quad.t0 },
|
||||
.uv2 = (t_fvec2){ quad.s1, quad.t1 },
|
||||
.uv3 = (t_fvec2){ quad.s0, quad.t1 },
|
||||
};
|
||||
|
||||
return push_to_vertex_buffer_builder(builder, &buffer_element, sizeof buffer_element);
|
||||
}
|
||||
|
||||
|
||||
@ -422,14 +423,41 @@ void finally_draw_text(struct font_data const *font_data,
|
||||
t_color color,
|
||||
vertex_buffer buffer)
|
||||
{
|
||||
(void)len;
|
||||
(void)buffer;
|
||||
|
||||
/* vertex specification */
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glVertexPointer(2,
|
||||
GL_FLOAT,
|
||||
offsetof(struct element_indexed_quad_without_color, v1),
|
||||
(void *)(size_t)offsetof(struct element_indexed_quad_without_color, v0));
|
||||
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glClientActiveTexture(GL_TEXTURE0);
|
||||
glTexCoordPointer(2,
|
||||
GL_FLOAT,
|
||||
offsetof(struct element_indexed_quad_without_color, v1),
|
||||
(void *)(size_t)offsetof(struct element_indexed_quad_without_color, uv0));
|
||||
|
||||
bind_quad_element_buffer();
|
||||
|
||||
use_texture_mode(TEXTURE_MODE_GHOSTLY);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, font_data->texture);
|
||||
|
||||
glColor4ub(color.r, color.g, color.b, color.a);
|
||||
|
||||
glDrawElements(GL_TRIANGLES, 6 * (GLsizei)len, GL_UNSIGNED_SHORT, NULL);
|
||||
|
||||
/* clear the state */
|
||||
glBufferData(GL_ARRAY_BUFFER, 0, NULL, GL_STREAM_DRAW);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user