@@ -1022,6 +1022,7 @@ uint32_t RenderingServer::mesh_surface_get_format_attribute_stride(BitField<Arra
10221022 mesh_surface_make_offsets_from_format (p_format, p_vertex_len, 0 , offsets, vstr, ntstr, astr, sstr);
10231023 return astr;
10241024}
1025+
10251026uint32_t RenderingServer::mesh_surface_get_format_skin_stride (BitField<ArrayFormat> p_format, int p_vertex_len) const {
10261027 p_format = uint64_t (p_format) & ~ARRAY_FORMAT_INDEX;
10271028 uint32_t offsets[ARRAY_MAX];
@@ -1033,6 +1034,19 @@ uint32_t RenderingServer::mesh_surface_get_format_skin_stride(BitField<ArrayForm
10331034 return sstr;
10341035}
10351036
1037+ uint32_t RenderingServer::mesh_surface_get_format_index_stride (BitField<ArrayFormat> p_format, int p_vertex_len) const {
1038+ if (!(p_format & ARRAY_FORMAT_INDEX)) {
1039+ return 0 ;
1040+ }
1041+
1042+ // Determine whether using 16 or 32 bits indices.
1043+ if (p_vertex_len <= (1 << 16 ) && p_vertex_len > 0 ) {
1044+ return 2 ;
1045+ } else {
1046+ return 4 ;
1047+ }
1048+ }
1049+
10361050void RenderingServer::mesh_surface_make_offsets_from_format (uint64_t p_format, int p_vertex_len, int p_index_len, uint32_t *r_offsets, uint32_t &r_vertex_element_size, uint32_t &r_normal_element_size, uint32_t &r_attrib_element_size, uint32_t &r_skin_element_size) const {
10371051 r_vertex_element_size = 0 ;
10381052 r_normal_element_size = 0 ;
@@ -2337,6 +2351,7 @@ void RenderingServer::_bind_methods() {
23372351 ClassDB::bind_method (D_METHOD (" mesh_surface_get_format_normal_tangent_stride" , " format" , " vertex_count" ), &RenderingServer::mesh_surface_get_format_normal_tangent_stride);
23382352 ClassDB::bind_method (D_METHOD (" mesh_surface_get_format_attribute_stride" , " format" , " vertex_count" ), &RenderingServer::mesh_surface_get_format_attribute_stride);
23392353 ClassDB::bind_method (D_METHOD (" mesh_surface_get_format_skin_stride" , " format" , " vertex_count" ), &RenderingServer::mesh_surface_get_format_skin_stride);
2354+ ClassDB::bind_method (D_METHOD (" mesh_surface_get_format_index_stride" , " format" , " vertex_count" ), &RenderingServer::mesh_surface_get_format_index_stride);
23402355 ClassDB::bind_method (D_METHOD (" mesh_add_surface" , " mesh" , " surface" ), &RenderingServer::_mesh_add_surface);
23412356 ClassDB::bind_method (D_METHOD (" mesh_add_surface_from_arrays" , " mesh" , " primitive" , " arrays" , " blend_shapes" , " lods" , " compress_format" ), &RenderingServer::mesh_add_surface_from_arrays, DEFVAL (Array ()), DEFVAL (Dictionary ()), DEFVAL (0 ));
23422357 ClassDB::bind_method (D_METHOD (" mesh_get_blend_shape_count" , " mesh" ), &RenderingServer::mesh_get_blend_shape_count);
@@ -2357,6 +2372,7 @@ void RenderingServer::_bind_methods() {
23572372 ClassDB::bind_method (D_METHOD (" mesh_surface_update_vertex_region" , " mesh" , " surface" , " offset" , " data" ), &RenderingServer::mesh_surface_update_vertex_region);
23582373 ClassDB::bind_method (D_METHOD (" mesh_surface_update_attribute_region" , " mesh" , " surface" , " offset" , " data" ), &RenderingServer::mesh_surface_update_attribute_region);
23592374 ClassDB::bind_method (D_METHOD (" mesh_surface_update_skin_region" , " mesh" , " surface" , " offset" , " data" ), &RenderingServer::mesh_surface_update_skin_region);
2375+ ClassDB::bind_method (D_METHOD (" mesh_surface_update_index_region" , " mesh" , " surface" , " offset" , " data" ), &RenderingServer::mesh_surface_update_index_region);
23602376
23612377 ClassDB::bind_method (D_METHOD (" mesh_set_shadow_mesh" , " mesh" , " shadow_mesh" ), &RenderingServer::mesh_set_shadow_mesh);
23622378
0 commit comments