[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50684] trunk/blender/source/blender: 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.

Campbell Barton ideasman42 at gmail.com
Mon Sep 17 07:31:41 CEST 2012


Revision: 50684
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50684
Author:   campbellbarton
Date:     2012-09-17 05:31:41 +0000 (Mon, 17 Sep 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/BLI_endian_switch.h
    trunk/blender/source/blender/blenloader/intern/readfile.c

Modified: trunk/blender/source/blender/blenlib/BLI_endian_switch.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_endian_switch.h	2012-09-17 04:29:43 UTC (rev 50683)
+++ trunk/blender/source/blender/blenlib/BLI_endian_switch.h	2012-09-17 05:31:41 UTC (rev 50684)
@@ -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__ */

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-09-17 04:29:43 UTC (rev 50683)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-09-17 05:31:41 UTC (rev 50684)
@@ -6289,6 +6289,14 @@
 
 		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);




More information about the Bf-blender-cvs mailing list