+extern vec_t softwaretransform_rotatematrix[3][4];
+extern vec_t softwaretransform_matrix[3][4];
+extern vec_t softwaretransform_invmatrix[3][4];
+extern int softwaretransform_complexity;
+
+void softwaretransformidentity (void);
+void softwaretransformset (vec3_t origin, vec3_t angles, vec_t scale);
+void softwaretransformforentity (entity_render_t *r);
+
+// #defines for speed reasons
+#define softwaretransform(in, out)\
+{\
+ if (softwaretransform_complexity == 0)\
+ {\
+ VectorCopy(in, out);\
+ }\
+ else if (softwaretransform_complexity == 1)\
+ {\
+ out[0] = in[0] + softwaretransform_matrix[0][3];\
+ out[1] = in[1] + softwaretransform_matrix[1][3];\
+ out[2] = in[2] + softwaretransform_matrix[2][3];\
+ }\
+ else\
+ {\
+ out[0] = DotProduct(in, softwaretransform_matrix[0]) + softwaretransform_matrix[0][3];\
+ out[1] = DotProduct(in, softwaretransform_matrix[1]) + softwaretransform_matrix[1][3];\
+ out[2] = DotProduct(in, softwaretransform_matrix[2]) + softwaretransform_matrix[2][3];\
+ }\
+}
+
+#define softwaretransformdirection(in, out)\
+{\
+ if (softwaretransform_complexity == 2)\
+ {\
+ out[0] = DotProduct(in, softwaretransform_rotatematrix[0]);\
+ out[1] = DotProduct(in, softwaretransform_rotatematrix[1]);\
+ out[2] = DotProduct(in, softwaretransform_rotatematrix[2]);\
+ }\
+ else\
+ VectorCopy(in, out);\
+}
+
+#define softwareuntransform(in, out)\
+{\
+ if (softwaretransform_complexity == 0)\
+ {\
+ VectorCopy(in, out);\
+ }\
+ else if (softwaretransform_complexity == 1)\
+ {\
+ out[0] = in[0] - softwaretransform_invmatrix[0][3];\
+ out[1] = in[1] - softwaretransform_invmatrix[1][3];\
+ out[2] = in[2] - softwaretransform_invmatrix[2][3];\
+ }\
+ else\
+ {\
+ vec3_t soft_v;\
+ soft_v[0] = in[0] - softwaretransform_invmatrix[0][3];\
+ soft_v[1] = in[1] - softwaretransform_invmatrix[1][3];\
+ soft_v[2] = in[2] - softwaretransform_invmatrix[2][3];\
+ out[0] = DotProduct(soft_v, softwaretransform_invmatrix[0]);\
+ out[1] = DotProduct(soft_v, softwaretransform_invmatrix[1]);\
+ out[2] = DotProduct(soft_v, softwaretransform_invmatrix[2]);\
+ }\
+}
+
+#endif