diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-05 10:08:34 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-05 10:08:34 +0200 |
commit | 829d9bb6ba24ad955ac8fd29a88ed25572adc1dd (patch) | |
tree | a27983295f8f5151c5f682fe5bf81ab2efa12f90 | |
parent | d8ab9534423a5537c19c2a43577c5716d3114975 (diff) | |
parent | c3d1b522549b35fb0494d3b0577fe7b5c0e04065 (diff) | |
download | redot-engine-829d9bb6ba24ad955ac8fd29a88ed25572adc1dd.tar.gz |
Merge pull request #82451 from DarioSamo/mesh-storage-vertex-array-taa-fix
Fix mismatch between surface vertex array generation inside the function and the caller.
-rw-r--r-- | servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp | 14 | ||||
-rw-r--r-- | servers/rendering/renderer_rd/storage_rd/mesh_storage.h | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp index 9c7bcbb54f..cb7eb3cd59 100644 --- a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp @@ -1061,7 +1061,7 @@ void MeshStorage::update_mesh_instances() { RD::get_singleton()->compute_list_end(); } -void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::Version &v, Mesh::Surface *s, uint32_t p_input_mask, bool p_input_motion_vectors, MeshInstance::Surface *mis) { +void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::Version &v, Mesh::Surface *s, uint32_t p_input_mask, bool p_input_motion_vectors, MeshInstance::Surface *mis, uint32_t p_current_buffer, uint32_t p_previous_buffer) { Vector<RD::VertexAttribute> attributes; Vector<RID> buffers; @@ -1134,7 +1134,7 @@ void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::V } if (mis) { - buffer = mis->vertex_buffer[mis->current_buffer]; + buffer = mis->vertex_buffer[p_current_buffer]; } else { buffer = s->vertex_buffer; } @@ -1146,7 +1146,7 @@ void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::V stride += sizeof(uint16_t) * 2; if (mis) { - buffer = mis->vertex_buffer[mis->current_buffer]; + buffer = mis->vertex_buffer[p_current_buffer]; } else { buffer = s->vertex_buffer; } @@ -1157,7 +1157,7 @@ void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::V stride += sizeof(uint16_t) * 2; if (mis) { - buffer = mis->vertex_buffer[mis->current_buffer]; + buffer = mis->vertex_buffer[p_current_buffer]; } else { buffer = s->vertex_buffer; } @@ -1241,7 +1241,7 @@ void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::V if (int(vd.location) != i) { if (mis && buffer != mesh_default_rd_buffers[i]) { - buffer = mis->vertex_buffer[mis->previous_buffer]; + buffer = mis->vertex_buffer[p_previous_buffer]; } attributes.push_back(vd); @@ -1267,8 +1267,8 @@ void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::V } v.input_mask = p_input_mask; - v.current_buffer = mis ? mis->current_buffer : 0; - v.previous_buffer = mis ? mis->previous_buffer : 0; + v.current_buffer = p_current_buffer; + v.previous_buffer = p_previous_buffer; v.input_motion_vectors = p_input_motion_vectors; v.vertex_format = RD::get_singleton()->vertex_format_create(attributes); v.vertex_array = RD::get_singleton()->vertex_array_create(s->vertex_count, v.vertex_format, buffers); diff --git a/servers/rendering/renderer_rd/storage_rd/mesh_storage.h b/servers/rendering/renderer_rd/storage_rd/mesh_storage.h index 86e81d56cc..1e1db9c47d 100644 --- a/servers/rendering/renderer_rd/storage_rd/mesh_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/mesh_storage.h @@ -190,7 +190,7 @@ private: weight_update_list(this), array_update_list(this) {} }; - void _mesh_surface_generate_version_for_input_mask(Mesh::Surface::Version &v, Mesh::Surface *s, uint32_t p_input_mask, bool p_input_motion_vectors, MeshInstance::Surface *mis = nullptr); + void _mesh_surface_generate_version_for_input_mask(Mesh::Surface::Version &v, Mesh::Surface *s, uint32_t p_input_mask, bool p_input_motion_vectors, MeshInstance::Surface *mis = nullptr, uint32_t p_current_buffer = 0, uint32_t p_previous_buffer = 0); void _mesh_instance_clear(MeshInstance *mi); void _mesh_instance_add_surface(MeshInstance *mi, Mesh *mesh, uint32_t p_surface); @@ -523,7 +523,7 @@ public: mis->version_count++; mis->versions = (Mesh::Surface::Version *)memrealloc(mis->versions, sizeof(Mesh::Surface::Version) * mis->version_count); - _mesh_surface_generate_version_for_input_mask(mis->versions[version], s, p_input_mask, p_input_motion_vectors, mis); + _mesh_surface_generate_version_for_input_mask(mis->versions[version], s, p_input_mask, p_input_motion_vectors, mis, current_buffer, previous_buffer); r_vertex_format = mis->versions[version].vertex_format; r_vertex_array_rd = mis->versions[version].vertex_array; |