twn_lines.c: introduction with proper impl

This commit is contained in:
veclavtalica
2025-02-28 23:50:12 +03:00
parent 844283c2fb
commit e47b761a2c
8 changed files with 124 additions and 50 deletions

View File

@ -630,12 +630,24 @@ void finally_draw_command(DeferredCommandDraw command) {
textures_bind(&ctx.texture_cache, command.texture_key);
}
GLenum geometry_mode;
switch (command.geometry_mode) {
case DEFERRED_COMMAND_DRAW_GEOMETRY_MODE_TRIANGLES:
geometry_mode = GL_TRIANGLES;
break;
case DEFERRED_COMMAND_DRAW_GEOMETRY_MODE_LINES:
geometry_mode = GL_LINES;
break;
default:
SDL_assert(false);
}
if (command.element_buffer) {
SDL_assert(command.element_count != 0);
if (command.range_start == command.range_end)
glDrawElements(GL_TRIANGLES, command.element_count, GL_UNSIGNED_SHORT, NULL);
glDrawElements(geometry_mode, command.element_count, GL_UNSIGNED_SHORT, NULL);
else
glDrawRangeElements(GL_TRIANGLES,
glDrawRangeElements(geometry_mode,
command.range_start,
command.range_end,
command.element_count,
@ -643,7 +655,7 @@ void finally_draw_command(DeferredCommandDraw command) {
NULL);
} else {
SDL_assert(command.primitive_count != 0);
glDrawArrays(GL_TRIANGLES, 0, command.primitive_count);
glDrawArrays(geometry_mode, 0, command.primitive_count);
}
/* state clearing */
@ -662,14 +674,3 @@ void finally_draw_command(DeferredCommandDraw command) {
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
void render_line(const LinePrimitive *line) {
finally_use_2d_pipeline();
glBegin(GL_LINES);
glColor4ub(line->color.r, line->color.g, line->color.b, line->color.a);
glVertex2f(line->start.x, line->start.y);
glColor4ub(line->color.r, line->color.g, line->color.b, line->color.a);
glVertex2f(line->finish.x, line->finish.y);
glEnd();
}