mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Expose RS.mesh_surface_update_index_region
And `mesh_surface_get_format_index_stride`
This commit is contained in:
parent
1b37dacc18
commit
63c124fa45
10 changed files with 78 additions and 6 deletions
|
|
@ -534,10 +534,10 @@ RS::BlendShapeMode MeshStorage::mesh_get_blend_shape_mode(RID p_mesh) const {
|
|||
}
|
||||
|
||||
void MeshStorage::mesh_surface_update_vertex_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) {
|
||||
ERR_FAIL_COND(p_data.is_empty());
|
||||
Mesh *mesh = mesh_owner.get_or_null(p_mesh);
|
||||
ERR_FAIL_NULL(mesh);
|
||||
ERR_FAIL_UNSIGNED_INDEX((uint32_t)p_surface, mesh->surface_count);
|
||||
ERR_FAIL_COND(p_data.is_empty());
|
||||
|
||||
uint64_t data_size = p_data.size();
|
||||
ERR_FAIL_COND(p_offset + data_size > mesh->surfaces[p_surface]->vertex_buffer_size);
|
||||
|
|
@ -549,10 +549,10 @@ void MeshStorage::mesh_surface_update_vertex_region(RID p_mesh, int p_surface, i
|
|||
}
|
||||
|
||||
void MeshStorage::mesh_surface_update_attribute_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) {
|
||||
ERR_FAIL_COND(p_data.is_empty());
|
||||
Mesh *mesh = mesh_owner.get_or_null(p_mesh);
|
||||
ERR_FAIL_NULL(mesh);
|
||||
ERR_FAIL_UNSIGNED_INDEX((uint32_t)p_surface, mesh->surface_count);
|
||||
ERR_FAIL_COND(p_data.is_empty());
|
||||
|
||||
uint64_t data_size = p_data.size();
|
||||
ERR_FAIL_COND(p_offset + data_size > mesh->surfaces[p_surface]->attribute_buffer_size);
|
||||
|
|
@ -564,10 +564,10 @@ void MeshStorage::mesh_surface_update_attribute_region(RID p_mesh, int p_surface
|
|||
}
|
||||
|
||||
void MeshStorage::mesh_surface_update_skin_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) {
|
||||
ERR_FAIL_COND(p_data.is_empty());
|
||||
Mesh *mesh = mesh_owner.get_or_null(p_mesh);
|
||||
ERR_FAIL_NULL(mesh);
|
||||
ERR_FAIL_UNSIGNED_INDEX((uint32_t)p_surface, mesh->surface_count);
|
||||
ERR_FAIL_COND(p_data.is_empty());
|
||||
|
||||
uint64_t data_size = p_data.size();
|
||||
ERR_FAIL_COND(p_offset + data_size > mesh->surfaces[p_surface]->skin_buffer_size);
|
||||
|
|
@ -578,6 +578,21 @@ void MeshStorage::mesh_surface_update_skin_region(RID p_mesh, int p_surface, int
|
|||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
}
|
||||
|
||||
void MeshStorage::mesh_surface_update_index_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) {
|
||||
ERR_FAIL_COND(p_data.is_empty());
|
||||
Mesh *mesh = mesh_owner.get_or_null(p_mesh);
|
||||
ERR_FAIL_NULL(mesh);
|
||||
ERR_FAIL_UNSIGNED_INDEX((uint32_t)p_surface, mesh->surface_count);
|
||||
|
||||
uint64_t data_size = p_data.size();
|
||||
ERR_FAIL_COND(p_offset + data_size > mesh->surfaces[p_surface]->index_buffer_size);
|
||||
const uint8_t *r = p_data.ptr();
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, mesh->surfaces[p_surface]->index_buffer);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, p_offset, data_size, r);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
}
|
||||
|
||||
void MeshStorage::mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material) {
|
||||
Mesh *mesh = mesh_owner.get_or_null(p_mesh);
|
||||
ERR_FAIL_NULL(mesh);
|
||||
|
|
|
|||
|
|
@ -301,6 +301,7 @@ public:
|
|||
virtual void mesh_surface_update_vertex_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) override;
|
||||
virtual void mesh_surface_update_attribute_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) override;
|
||||
virtual void mesh_surface_update_skin_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) override;
|
||||
virtual void mesh_surface_update_index_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) override;
|
||||
|
||||
virtual void mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material) override;
|
||||
virtual RID mesh_surface_get_material(RID p_mesh, int p_surface) const override;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue