aboutsummaryrefslogtreecommitdiff
path: root/servers/visual_server.cpp
diff options
context:
space:
mode:
authorJuan Linietsky2016-11-21 19:03:39 -0300
committerJuan Linietsky2016-11-21 19:03:39 -0300
commit70d095d8f201bd83a7106015f8f925ec54a8313c (patch)
tree99fcbe439bb1bc24f1f30d766b9089971548f935 /servers/visual_server.cpp
parenta2505542ffeea705208f72459152c5b86779e327 (diff)
downloadgodot-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.cpp22
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;