change grid shader primitive to line from triangle

This commit is contained in:
Sven Balzer
2026-08-01 09:37:43 +02:00
parent 08b8b397e2
commit f564c14354
7 changed files with 69 additions and 146 deletions
+6 -67
View File
@@ -45,8 +45,6 @@ static R_Buffer tint_color_buffer;
static R_Buffer vertex_buffer;
static R_Buffer index_buffer;
static R_Buffer grid_vertex_buffer;
static R_Buffer grid_index_buffer;
static R_Buffer player_instance_buffer;
static R_Buffer tile_uvs_buffer;
@@ -185,51 +183,6 @@ static Uint16 indices[] = {
0, 2, 3,
};
#define grid_line_size (1.0f / 64.0f)
static Vertex grid_vertices[] = {
// LEFT
{{ -0.5f, 0.5f, 0.0f }},
{{ -0.5f, -0.5f + grid_line_size, 0.0f }},
{{ -0.5f + grid_line_size, -0.5f + grid_line_size, 0.0f }},
{{ -0.5f + grid_line_size, 0.5f, 0.0f }},
// TOP
{{ -0.5f + grid_line_size, 0.5f, 0.0f }},
{{ -0.5f + grid_line_size, 0.5f - grid_line_size, 0.0f }},
{{ 0.5f, 0.5f - grid_line_size, 0.0f }},
{{ 0.5f, 0.5f, 0.0f }},
// RIGHT
{{ 0.5f - grid_line_size, 0.5f - grid_line_size, 0.0f }},
{{ 0.5f - grid_line_size, -0.5f, 0.0f }},
{{ 0.5f, -0.5f, 0.0f }},
{{ 0.5f, 0.5f - grid_line_size, 0.0f }},
// BOTTOM
{{ -0.5f, -0.5f + grid_line_size, 0.0f }},
{{ -0.5f, -0.5f, 0.0f }},
{{ 0.5f - grid_line_size, -0.5f, 0.0f }},
{{ 0.5f - grid_line_size, -0.5f + grid_line_size, 0.0f }},
};
static Uint16 grid_indices[] = {
// LEFT
0, 1, 2,
0, 2, 3,
// TOP
4, 5, 6,
4, 6, 7,
// RIGHT
8, 9, 10,
8, 10, 11,
// BOTTOM
12, 13, 14,
12, 14, 15,
};
struct Instance {
vec2 pos;
};
@@ -255,12 +208,13 @@ struct Player {
static Player player;
struct PerFrame {
struct alignas(16) PerFrame {
i32vec2 drag_start;
i32vec2 mouse;
vec2 grid_offset;
Sint32 grid_width;
Sint32 map_width;
Uint32 grid_width;
Uint32 map_width;
Uint32 grid_height;
};
static PerFrame per_frame = {};
@@ -928,18 +882,6 @@ static bool init_resources() {
return false;
}
grid_vertex_buffer = renderer_buffer_create(R_BUFFER_USAGE_VERTEX, sizeof(grid_vertices), grid_vertices, "grid_vertex_buffer");
if (!grid_vertex_buffer) {
log_error("Failed to create buffer.");
return false;
}
grid_index_buffer = renderer_buffer_create(R_BUFFER_USAGE_INDEX, sizeof(grid_indices), grid_indices, "grid_index_buffer");
if (!grid_index_buffer) {
log_error("Failed to create buffer.");
return false;
}
player_instance_buffer = renderer_buffer_create(R_BUFFER_USAGE_VERTEX, sizeof(player_instance), &player_instance, "player_instance_buffer");
if (!player_instance_buffer) {
log_error("Failed to create buffer.");
@@ -1329,6 +1271,7 @@ static void render_editor() {
per_frame.map_width = current_map.size.x;
per_frame.grid_width = selected_tile != -1 ? current_map.size.x : current_map.size.x + 1;
per_frame.grid_height = selected_tile != -1 ? current_map.size.y : current_map.size.y + 1;
per_frame.grid_offset = selected_tile != -1 ? vec2(-0.5f, -0.5f) : vec2(-1.0f, -1.0f);
per_frame.mouse = tile_pos;
@@ -1394,12 +1337,8 @@ static void render_editor() {
if (show_grid) {
ZoneScopedN("Draw Grid");
Uint32 num_grid_cells = current_map.size.y * current_map.size.x;
if (selected_tile == -1)
num_grid_cells = (current_map.size.y + 1) * (current_map.size.x + 1);
renderer_frame_set_shader(R_SHADER_GRID);
renderer_frame_draw(grid_vertex_buffer, grid_index_buffer, NULL, SDL_arraysize(grid_indices), num_grid_cells, &(R_Draw_Resources){
renderer_frame_draw(NULL, NULL, NULL, per_frame.grid_width * 2 + per_frame.grid_height * 2 + 4, 1, &(R_Draw_Resources){
.vertex_uniform_buffers = (R_Buffer[]){ view_projection_matrix_buffer, per_frame_buffer },
.num_vertex_uniform_buffers = 2,
});