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:
@@ -27,16 +27,36 @@
|
|||||||
* \ingroup bli
|
* \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 */
|
/* endian_switch.c */
|
||||||
void BLI_endian_switch_int16_array(short *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);
|
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);
|
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);
|
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);
|
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);
|
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);
|
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);
|
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__ */
|
#endif /* __BLI_ENDIAN_SWITCH_H__ */
|
||||||
|
@@ -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) {
|
for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) {
|
||||||
masklay_shape->data = newdataadr(fd, masklay_shape->data);
|
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);
|
masklay->act_spline = newdataadr(fd, masklay->act_spline);
|
||||||
|
Reference in New Issue
Block a user