diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-16 10:33:53 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-16 10:33:53 +0200 |
commit | 12eb1436f4a2bb503c3daf850e62c6dc3482e88a (patch) | |
tree | 151844e1646cea81d3e726a83dca33069cba5374 /editor/plugins/node_3d_editor_plugin.cpp | |
parent | 71ca5aa5ec9e84d91714cb4b21421e4703674e66 (diff) | |
parent | e71b3a75e4310d39a4f195b0e5721f552af0478c (diff) | |
download | redot-engine-12eb1436f4a2bb503c3daf850e62c6dc3482e88a.tar.gz |
Merge pull request #92734 from lawnjelly/faster_editor_grid4
Optimize Editor `_init_grid()`
Diffstat (limited to 'editor/plugins/node_3d_editor_plugin.cpp')
-rw-r--r-- | editor/plugins/node_3d_editor_plugin.cpp | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 59a4ac8075..3dce862df0 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -7289,9 +7289,15 @@ void Node3DEditor::_init_grid() { bool orthogonal = camera->get_projection() == Camera3D::PROJECTION_ORTHOGONAL; - Vector<Color> grid_colors[3]; - Vector<Vector3> grid_points[3]; - Vector<Vector3> grid_normals[3]; + static LocalVector<Color> grid_colors[3]; + static LocalVector<Vector3> grid_points[3]; + static LocalVector<Vector3> grid_normals[3]; + + for (uint32_t n = 0; n < 3; n++) { + grid_colors[n].clear(); + grid_points[n].clear(); + grid_normals[n].clear(); + } Color primary_grid_color = EDITOR_GET("editors/3d/primary_grid_color"); Color secondary_grid_color = EDITOR_GET("editors/3d/secondary_grid_color"); @@ -7367,10 +7373,9 @@ void Node3DEditor::_init_grid() { grid_mat[c]->set_shader_parameter("grid_size", grid_fade_size); grid_mat[c]->set_shader_parameter("orthogonal", orthogonal); - // Cache these so we don't have to re-access memory. - Vector<Vector3> &ref_grid = grid_points[c]; - Vector<Vector3> &ref_grid_normals = grid_normals[c]; - Vector<Color> &ref_grid_colors = grid_colors[c]; + LocalVector<Vector3> &ref_grid = grid_points[c]; + LocalVector<Vector3> &ref_grid_normals = grid_normals[c]; + LocalVector<Color> &ref_grid_colors = grid_colors[c]; // Count our elements same as code below it. int expected_size = 0; @@ -7415,12 +7420,12 @@ void Node3DEditor::_init_grid() { line_end[a] = position_a; line_bgn[b] = bgn_b; line_end[b] = end_b; - ref_grid.set(idx, line_bgn); - ref_grid.set(idx + 1, line_end); - ref_grid_colors.set(idx, line_color); - ref_grid_colors.set(idx + 1, line_color); - ref_grid_normals.set(idx, normal); - ref_grid_normals.set(idx + 1, normal); + ref_grid[idx] = line_bgn; + ref_grid[idx + 1] = line_end; + ref_grid_colors[idx] = line_color; + ref_grid_colors[idx + 1] = line_color; + ref_grid_normals[idx] = normal; + ref_grid_normals[idx + 1] = normal; idx += 2; } @@ -7431,12 +7436,12 @@ void Node3DEditor::_init_grid() { line_end[b] = position_b; line_bgn[a] = bgn_a; line_end[a] = end_a; - ref_grid.set(idx, line_bgn); - ref_grid.set(idx + 1, line_end); - ref_grid_colors.set(idx, line_color); - ref_grid_colors.set(idx + 1, line_color); - ref_grid_normals.set(idx, normal); - ref_grid_normals.set(idx + 1, normal); + ref_grid[idx] = line_bgn; + ref_grid[idx + 1] = line_end; + ref_grid_colors[idx] = line_color; + ref_grid_colors[idx + 1] = line_color; + ref_grid_normals[idx] = normal; + ref_grid_normals[idx + 1] = normal; idx += 2; } } @@ -7445,9 +7450,9 @@ void Node3DEditor::_init_grid() { grid[c] = RenderingServer::get_singleton()->mesh_create(); Array d; d.resize(RS::ARRAY_MAX); - d[RenderingServer::ARRAY_VERTEX] = grid_points[c]; - d[RenderingServer::ARRAY_COLOR] = grid_colors[c]; - d[RenderingServer::ARRAY_NORMAL] = grid_normals[c]; + d[RenderingServer::ARRAY_VERTEX] = (Vector<Vector3>)grid_points[c]; + d[RenderingServer::ARRAY_COLOR] = (Vector<Color>)grid_colors[c]; + d[RenderingServer::ARRAY_NORMAL] = (Vector<Vector3>)grid_normals[c]; RenderingServer::get_singleton()->mesh_add_surface_from_arrays(grid[c], RenderingServer::PRIMITIVE_LINES, d); RenderingServer::get_singleton()->mesh_surface_set_material(grid[c], 0, grid_mat[c]->get_rid()); grid_instance[c] = RenderingServer::get_singleton()->instance_create2(grid[c], get_tree()->get_root()->get_world_3d()->get_scenario()); |