add endian switching to mask shape key loading (loading mask animations between big/little endian systems would break), also set attributes to BLI_endian_switch_* functions.

This commit is contained in:
2012-09-17 05:31:41 +00:00
parent 13918dffd2
commit 7ecc9951a9
2 changed files with 37 additions and 9 deletions

View File

@@ -27,16 +27,36 @@
* \ingroup bli
*/
#include "BLI_endian_switch_inline.h"
#ifdef __GNUC__
# define ATTR_ENDIAN_SWITCH \
__attribute__((nonnull(1))) \
__attribute__((pure))
#else
# define ATTR_NONULL
#endif
/* BLI_endian_switch_inline.h */
BLI_INLINE void BLI_endian_switch_int16(short *val) ATTR_ENDIAN_SWITCH;
BLI_INLINE void BLI_endian_switch_uint16(unsigned short *val) ATTR_ENDIAN_SWITCH;
BLI_INLINE void BLI_endian_switch_int32(int *val) ATTR_ENDIAN_SWITCH;
BLI_INLINE void BLI_endian_switch_uint32(unsigned int *val) ATTR_ENDIAN_SWITCH;
BLI_INLINE void BLI_endian_switch_float(float *val) ATTR_ENDIAN_SWITCH;
BLI_INLINE void BLI_endian_switch_int64(int64_t *val) ATTR_ENDIAN_SWITCH;
BLI_INLINE void BLI_endian_switch_uint64(uint64_t *val) ATTR_ENDIAN_SWITCH;
BLI_INLINE void BLI_endian_switch_double(double *val) ATTR_ENDIAN_SWITCH;
/* endian_switch.c */
void BLI_endian_switch_int16_array(short *val, const int size);
void BLI_endian_switch_uint16_array(unsigned short *val, const int size);
void BLI_endian_switch_int32_array(int *val, const int size);
void BLI_endian_switch_uint32_array(unsigned int *val, const int size);
void BLI_endian_switch_float_array(float *val, const int size);
void BLI_endian_switch_int64_array(int64_t *val, const int size);
void BLI_endian_switch_uint64_array(uint64_t *val, const int size);
void BLI_endian_switch_double_array(double *val, const int size);
void BLI_endian_switch_int16_array(short *val, const int size) ATTR_ENDIAN_SWITCH;
void BLI_endian_switch_uint16_array(unsigned short *val, const int size) ATTR_ENDIAN_SWITCH;
void BLI_endian_switch_int32_array(int *val, const int size) ATTR_ENDIAN_SWITCH;
void BLI_endian_switch_uint32_array(unsigned int *val, const int size) ATTR_ENDIAN_SWITCH;
void BLI_endian_switch_float_array(float *val, const int size) ATTR_ENDIAN_SWITCH;
void BLI_endian_switch_int64_array(int64_t *val, const int size) ATTR_ENDIAN_SWITCH;
void BLI_endian_switch_uint64_array(uint64_t *val, const int size) ATTR_ENDIAN_SWITCH;
void BLI_endian_switch_double_array(double *val, const int size) ATTR_ENDIAN_SWITCH;
#include "BLI_endian_switch_inline.h"
#undef ATTR_ENDIAN_SWITCH
#endif /* __BLI_ENDIAN_SWITCH_H__ */

View File

@@ -6289,6 +6289,14 @@ static void direct_link_mask(FileData *fd, Mask *mask)
for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) {
masklay_shape->data = newdataadr(fd, masklay_shape->data);
if (masklay_shape->tot_vert) {
if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
BLI_endian_switch_float_array(masklay_shape->data,
masklay_shape->tot_vert * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE);
}
}
}
masklay->act_spline = newdataadr(fd, masklay->act_spline);