]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - transform.c
two-layer sky rendering now uses GL_ARB_texture_env_combine if available to render...
[xonotic/darkplaces.git] / transform.c
index b8db4c359e3f52b9e9d8ca5cb52a2167e72193cd..9396bbe3eb6eb4e986883074c88884efe8edac9e 100644 (file)
@@ -68,8 +68,20 @@ void softwaretransform_docopy (vec3_t in, vec3_t out)
        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)
        {
@@ -115,7 +127,7 @@ void softwaretransform_classify()
        }
 }
 
-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;
@@ -139,8 +151,14 @@ void softwaretransformset (vec3_t origin, vec3_t angles, vec_t scale)
 void softwaretransformforentity (entity_t *e)
 {
        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] = -e->render.angles[0];
+       angles[1] = e->render.angles[1];
+       angles[2] = e->render.angles[2];
+       softwaretransformset(e->render.origin, angles, e->render.scale);
+}
+
+// brush entities are not backwards like models and sprites are
+void softwaretransformforbrushentity (entity_t *e)
+{
+       softwaretransformset(e->render.origin, e->render.angles, e->render.scale);
 }