You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Clears RIDs wherever they are freed by VisualServer or PhysicsServer and possibly reused. Fixes #53374
This commit is contained in:
@@ -3191,16 +3191,39 @@ void SpatialEditorViewport::_init_gizmo_instance(int p_idx) {
|
||||
|
||||
void SpatialEditorViewport::_finish_gizmo_instances() {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
VS::get_singleton()->free(move_gizmo_instance[i]);
|
||||
VS::get_singleton()->free(move_plane_gizmo_instance[i]);
|
||||
VS::get_singleton()->free(rotate_gizmo_instance[i]);
|
||||
VS::get_singleton()->free(scale_gizmo_instance[i]);
|
||||
VS::get_singleton()->free(scale_plane_gizmo_instance[i]);
|
||||
if (move_gizmo_instance[i].is_valid()) {
|
||||
VS::get_singleton()->free(move_gizmo_instance[i]);
|
||||
move_gizmo_instance[i] = RID();
|
||||
}
|
||||
|
||||
if (move_plane_gizmo_instance[i].is_valid()) {
|
||||
VS::get_singleton()->free(move_plane_gizmo_instance[i]);
|
||||
move_plane_gizmo_instance[i] = RID();
|
||||
}
|
||||
|
||||
if (rotate_gizmo_instance[i].is_valid()) {
|
||||
VS::get_singleton()->free(rotate_gizmo_instance[i]);
|
||||
rotate_gizmo_instance[i] = RID();
|
||||
}
|
||||
|
||||
if (scale_gizmo_instance[i].is_valid()) {
|
||||
VS::get_singleton()->free(scale_gizmo_instance[i]);
|
||||
scale_gizmo_instance[i] = RID();
|
||||
}
|
||||
|
||||
if (scale_plane_gizmo_instance[i].is_valid()) {
|
||||
VS::get_singleton()->free(scale_plane_gizmo_instance[i]);
|
||||
scale_plane_gizmo_instance[i] = RID();
|
||||
}
|
||||
}
|
||||
|
||||
// Rotation white outline
|
||||
VS::get_singleton()->free(rotate_gizmo_instance[3]);
|
||||
// Rotation white outline. All of the arrays above have 3 elements, this has 4.
|
||||
if (rotate_gizmo_instance[3].is_valid()) {
|
||||
VS::get_singleton()->free(rotate_gizmo_instance[3]);
|
||||
rotate_gizmo_instance[3] = RID();
|
||||
}
|
||||
}
|
||||
|
||||
void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) {
|
||||
ERR_FAIL_COND(p_activate && !preview);
|
||||
ERR_FAIL_COND(!p_activate && !previewing);
|
||||
@@ -5855,16 +5878,30 @@ void SpatialEditor::_init_grid() {
|
||||
}
|
||||
|
||||
void SpatialEditor::_finish_indicators() {
|
||||
VisualServer::get_singleton()->free(origin_instance);
|
||||
VisualServer::get_singleton()->free(origin);
|
||||
if (origin_instance.is_valid()) {
|
||||
VisualServer::get_singleton()->free(origin_instance);
|
||||
origin_instance = RID();
|
||||
}
|
||||
|
||||
if (origin.is_valid()) {
|
||||
VisualServer::get_singleton()->free(origin);
|
||||
origin = RID();
|
||||
}
|
||||
|
||||
_finish_grid();
|
||||
}
|
||||
|
||||
void SpatialEditor::_finish_grid() {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
VisualServer::get_singleton()->free(grid_instance[i]);
|
||||
VisualServer::get_singleton()->free(grid[i]);
|
||||
if (grid_instance[i].is_valid()) {
|
||||
VisualServer::get_singleton()->free(grid_instance[i]);
|
||||
grid_instance[i] = RID();
|
||||
}
|
||||
|
||||
if (grid[i].is_valid()) {
|
||||
VisualServer::get_singleton()->free(grid[i]);
|
||||
grid[i] = RID();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user