Fix: Overlay-Next when multiple objects are click selected

Fixes Overlay-Next selection when multiple objects are hit.

To reproduce:
- enable "Ovlay Next" in Preferences>Experimental
- create any Empty object and duplicate it without moving
- try to select by clicking them

Crash occurs because `mixed_bones_object_selectbuffer` in `view3d_select.cc` expects that `view3d_opengl_select_ex` will append results to `buffer`. Depending on situation after several `view3d_opengl_select_ex`calls with decreasing radius it tries to `slice` results from buffer:
```c
has_bones9 = selectbuffer_has_bones(storage.as_span().slice(ofs, hits9));
```

Pull Request: https://projects.blender.org/blender/blender/pulls/124154
This commit is contained in:
Laurynas Duburas 2024-07-17 16:07:15 +02:00 committed by Clément Foucault
parent 80f0c613c0
commit a412268980

View File

@ -50,8 +50,10 @@ eGPUSelectMode gpu_select_next_get_mode()
void gpu_select_next_set_result(GPUSelectResult *hit_buf, uint hit_len)
{
g_state.buffer->storage.resize(hit_len);
blender::MutableSpan<GPUSelectResult> hit_results = g_state.buffer->storage.as_mutable_span();
const int old_size = g_state.buffer->storage.size();
g_state.buffer->storage.resize(old_size + hit_len);
blender::MutableSpan<GPUSelectResult> hit_results =
g_state.buffer->storage.as_mutable_span().slice(old_size, hit_len);
const blender::Span<GPUSelectResult> hits(hit_buf, hit_len);
/* TODO(fclem): There might be some conversion to do to align to the other APIs output. */