浏览代码

Unpack blend shape arrays when necessary

Blend shapes need to be unpacked if the vertex array is being unpacked

(cherry picked from commit 33d825c50bee22987c33f3364a55fdb731e9ab3d)
clayjohn 3 年之前
父节点
当前提交
29fc16d4b6
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      drivers/gles2/rasterizer_storage_gles2.cpp

+ 7 - 1
drivers/gles2/rasterizer_storage_gles2.cpp

@@ -2493,7 +2493,13 @@ void RasterizerStorageGLES2::mesh_add_surface(RID p_mesh, uint32_t p_format, VS:
 		uint32_t new_format = p_format;
 		PoolVector<uint8_t> unpacked_array = _unpack_half_floats(array, new_format, p_vertex_count);
 
-		mesh_add_surface(p_mesh, new_format, p_primitive, unpacked_array, p_vertex_count, p_index_array, p_index_count, p_aabb, p_blend_shapes, p_bone_aabbs);
+		Vector<PoolVector<uint8_t>> unpacked_blend_shapes;
+		for (int i = 0; i < p_blend_shapes.size(); i++) {
+			uint32_t temp_format = p_format; // Just throw this away as it will be the same as new_format
+			unpacked_blend_shapes.push_back(_unpack_half_floats(p_blend_shapes[i], temp_format, p_vertex_count));
+		}
+
+		mesh_add_surface(p_mesh, new_format, p_primitive, unpacked_array, p_vertex_count, p_index_array, p_index_count, p_aabb, unpacked_blend_shapes, p_bone_aabbs);
 		return; //do not go any further, above function used unpacked stuff will be used instead.
 	}