freebsd-ports/games/egl/files/patch-shared__shared.c
Alejandro Pulver 9f2d15ac29 Enhaced OpenGL only Quake II engine.
WWW: http://egl.quakedev.com/

Approved by:	garga (mentor, implicitly)
2006-05-25 18:44:00 +00:00

115 lines
2.2 KiB
C

--- ./shared/shared.c.orig Tue May 23 20:05:59 2006
+++ ./shared/shared.c Tue May 23 20:06:00 2006
@@ -539,3 +539,112 @@
dest--;
}
}
+
+/*
+==============================================================================
+
+ BYTE ORDER FUNCTIONS
+
+==============================================================================
+*/
+
+qBool bigendien;
+
+/*
+ * Can't just use function pointers, or DLL linkage can mess up when qcommon
+ * is included in multiple places.
+ */
+
+int16 (*_LittleShort) (int16 l);
+int32 (*_LittleLong) (int32 l);
+float (*_LittleFloat) (float l);
+int16 (*_BigShort) (int16 l);
+int32 (*_BigLong) (int32 l);
+float (*_BigFloat) (float l);
+
+int16 LittleShort (int16 l) { return _LittleShort(l); }
+int32 LittleLong (int32 l) { return _LittleLong(l); }
+float LittleFloat (float l) { return _LittleFloat(l); }
+int16 BigShort (int16 l) { return _BigShort(l); }
+int32 BigLong (int32 l) { return _BigLong(l); }
+float BigFloat (float l) { return _BigFloat(l); }
+
+int16 ShortNoSwap (int16 l) { return l; }
+int32 LongNoSwap (int32 l) { return l; }
+float FloatNoSwap (float f) { return f; }
+
+int16 ShortSwap (int16 s)
+{
+ union {
+ byte b[2];
+ int16 s;
+ } in, out;
+
+ in.s = s;
+
+ out.b[0] = in.b[1];
+ out.b[1] = in.b[0];
+
+ return out.s;
+}
+
+int32 LongSwap (int32 l)
+{
+ union {
+ byte b[4];
+ int l;
+ } in, out;
+
+ in.l = l;
+
+ out.b[0] = in.b[3];
+ out.b[1] = in.b[2];
+ out.b[2] = in.b[1];
+ out.b[3] = in.b[0];
+
+ return out.l;
+}
+
+float FloatSwap (float f)
+{
+ union {
+ byte b[4];
+ float f;
+ } in, out;
+
+ in.f = f;
+
+ out.b[0] = in.b[3];
+ out.b[1] = in.b[2];
+ out.b[2] = in.b[1];
+ out.b[3] = in.b[0];
+
+ return out.f;
+}
+
+/*
+ * Swap_Init
+ * Set the byte swapping variables in a portable manner.
+ */
+void Swap_Init (void)
+{
+ byte swaptest[2] = {1, 0};
+
+ if (*(int16 *)swaptest == 1) {
+ bigendien = qFalse;
+ _LittleShort = ShortNoSwap;
+ _LittleLong = LongNoSwap;
+ _LittleFloat = FloatNoSwap;
+ _BigShort = ShortSwap;
+ _BigLong = LongSwap;
+ _BigFloat = FloatSwap;
+ } else {
+ bigendien = qTrue;
+ _LittleShort = ShortSwap;
+ _LittleLong = LongSwap;
+ _LittleFloat = FloatSwap;
+ _BigShort = ShortNoSwap;
+ _BigLong = LongNoSwap;
+ _BigFloat = FloatNoSwap;
+ }
+}