text rendering over vertex arrays, rework fully done, finally

This commit is contained in:
2024-09-18 19:01:43 +03:00
parent 16c96010dc
commit 691d781827
2 changed files with 130 additions and 351 deletions

View File

@ -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);
}