Fix incorrect error checking and notifications introduced in PR #80414.
There was an error in the other branch of the refactored function where the size of the array was not properly multiplied by the size of the float to check against the buffer size. This was only an error in the error-checking itself and not the functionality. There was also an error where the proper notification was not emitted whenever the buffer for the multimesh is recreated to invalidate the previous references the renderer might've created to it. This fixes CPU Particles getting corrupted when they're created without emission being enabled.
This commit is contained in:
parent
7ba79d68bd
commit
420f3890b0
|
@ -1318,7 +1318,7 @@ void MeshStorage::_multimesh_enable_motion_vectors(MultiMesh *multimesh) {
|
||||||
RD::get_singleton()->buffer_update(new_buffer, buffer_size, buffer_size, buffer_data.ptr());
|
RD::get_singleton()->buffer_update(new_buffer, buffer_size, buffer_size, buffer_data.ptr());
|
||||||
} else if (!multimesh->data_cache.is_empty()) {
|
} else if (!multimesh->data_cache.is_empty()) {
|
||||||
// Simply upload the data cached in the CPU, which should already be doubled in size.
|
// Simply upload the data cached in the CPU, which should already be doubled in size.
|
||||||
ERR_FAIL_COND(multimesh->data_cache.size() != int(new_buffer_size));
|
ERR_FAIL_COND(multimesh->data_cache.size() * sizeof(float) != size_t(new_buffer_size));
|
||||||
RD::get_singleton()->buffer_update(new_buffer, 0, new_buffer_size, multimesh->data_cache.ptr());
|
RD::get_singleton()->buffer_update(new_buffer, 0, new_buffer_size, multimesh->data_cache.ptr());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1328,6 +1328,9 @@ void MeshStorage::_multimesh_enable_motion_vectors(MultiMesh *multimesh) {
|
||||||
|
|
||||||
multimesh->buffer = new_buffer;
|
multimesh->buffer = new_buffer;
|
||||||
multimesh->uniform_set_3d = RID(); // Cleared by dependency.
|
multimesh->uniform_set_3d = RID(); // Cleared by dependency.
|
||||||
|
|
||||||
|
// Invalidate any references to the buffer that was released and the uniform set that was pointing to it.
|
||||||
|
multimesh->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_MULTIMESH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshStorage::_multimesh_get_motion_vectors_offsets(RID p_multimesh, uint32_t &r_current_offset, uint32_t &r_prev_offset) {
|
void MeshStorage::_multimesh_get_motion_vectors_offsets(RID p_multimesh, uint32_t &r_current_offset, uint32_t &r_prev_offset) {
|
||||||
|
|
Loading…
Reference in New Issue