out[2] = in[2];
}
+void softwareuntransform (vec3_t in, vec3_t out)
+{
+ vec3_t v;
+ float s = 1.0f / softwaretransform_scale;
+ v[0] = in[0] - softwaretransform_offset[0];
+ v[1] = in[1] - softwaretransform_offset[1];
+ v[2] = in[2] - softwaretransform_offset[2];
+ out[0] = (v[0] * softwaretransform_x[0] + v[1] * softwaretransform_x[1] + v[2] * softwaretransform_x[2]) * s;
+ out[1] = (v[0] * softwaretransform_y[0] + v[1] * softwaretransform_y[1] + v[2] * softwaretransform_y[2]) * s;
+ out[2] = (v[0] * softwaretransform_z[0] + v[1] * softwaretransform_z[1] + v[2] * softwaretransform_z[2]) * s;
+}
+
// to save time on transforms, choose the appropriate function
-void softwaretransform_classify()
+void softwaretransform_classify(void)
{
if (softwaretransform_offset[0] != 0 || softwaretransform_offset[1] != 0 || softwaretransform_offset[2] != 0)
{
}
}
-void softwaretransformidentity ()
+void softwaretransformidentity(void)
{
softwaretransform_offset[0] = softwaretransform_offset[1] = softwaretransform_offset[2] = softwaretransform_x[1] = softwaretransform_x[2] = softwaretransform_y[0] = softwaretransform_y[2] = softwaretransform_z[0] = softwaretransform_z[1] = 0;
softwaretransform_x[0] = softwaretransform_y[1] = softwaretransform_z[2] = 1;
softwaretransform_classify();
}
-void softwaretransformforentity (entity_t *e)
+void softwaretransformforentity (entity_render_t *r)
{
vec3_t angles;
- angles[0] = -e->angles[0];
- angles[1] = e->angles[1];
- angles[2] = e->angles[2];
- softwaretransformset(e->origin, angles, e->scale);
+ angles[0] = -r->angles[0];
+ angles[1] = r->angles[1];
+ angles[2] = r->angles[2];
+ softwaretransformset(r->origin, angles, r->scale);
+}
+
+// brush entities are not backwards like models and sprites are
+void softwaretransformforbrushentity (entity_render_t *r)
+{
+ softwaretransformset(r->origin, r->angles, r->scale);
}