diff options
| author | Juan Linietsky | 2016-11-21 19:03:39 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2016-11-21 19:03:39 -0300 |
| commit | 70d095d8f201bd83a7106015f8f925ec54a8313c (patch) | |
| tree | 99fcbe439bb1bc24f1f30d766b9089971548f935 /servers/visual_server.cpp | |
| parent | a2505542ffeea705208f72459152c5b86779e327 (diff) | |
| download | godot-70d095d8f201bd83a7106015f8f925ec54a8313c.tar.gz godot-70d095d8f201bd83a7106015f8f925ec54a8313c.tar.zst godot-70d095d8f201bd83a7106015f8f925ec54a8313c.zip | |
Skeletons are working now.
Diffstat (limited to 'servers/visual_server.cpp')
| -rw-r--r-- | servers/visual_server.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index 953448db5..267a87930 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -1007,12 +1007,26 @@ void VisualServer::mesh_add_surface_from_arrays(RID p_mesh,PrimitiveType p_primi } break; case VS::ARRAY_BONES: { - if (p_compress_format&ARRAY_FLAG_USE_16_BIT_BONES) { - elem_size=sizeof(uint32_t); - } else { + DVector<int> bones = p_arrays[VS::ARRAY_BONES]; + int max_bone=0; + + { + int bc = bones.size(); + DVector<int>::Read r=bones.read(); + for(int j=0;j<bc;j++) { + max_bone=MAX(r[j],max_bone); + } + } + + if (max_bone > 255) { + p_compress_format|=ARRAY_FLAG_USE_16_BIT_BONES; elem_size=sizeof(uint16_t)*4; + } else { + p_compress_format&=~ARRAY_FLAG_USE_16_BIT_BONES; + elem_size=sizeof(uint32_t); } + } break; case VS::ARRAY_INDEX: { @@ -1043,7 +1057,7 @@ void VisualServer::mesh_add_surface_from_arrays(RID p_mesh,PrimitiveType p_primi } uint32_t mask = (1<<ARRAY_MAX)-1; - format|=~mask&p_compress_format; //make the full format + format|=(~mask)&p_compress_format; //make the full format int array_size = total_elem_size * array_len; |
