+void R_DebugLine(vec3_t start, vec3_t end)
+{
+ dp_model_t *mod = CL_Mesh_UI();
+ msurface_t *surf;
+ int e0, e1, e2, e3;
+ float offsetx, offsety, x1, y1, x2, y2, width = 1.0f;
+ float r1 = 1.0f, g1 = 0.0f, b1 = 0.0f, alpha1 = 0.25f;
+ float r2 = 1.0f, g2 = 1.0f, b2 = 0.0f, alpha2 = 0.25f;
+ vec4_t w[2], s[2];
+
+ // transform to screen coords first
+ Vector4Set(w[0], start[0], start[1], start[2], 1);
+ Vector4Set(w[1], end[0], end[1], end[2], 1);
+ R_Viewport_TransformToScreen(&r_refdef.view.viewport, w[0], s[0]);
+ R_Viewport_TransformToScreen(&r_refdef.view.viewport, w[1], s[1]);
+ x1 = s[0][0] * vid_conwidth.value / vid.width;
+ y1 = (vid.height - s[0][1]) * vid_conheight.value / vid.height;
+ x2 = s[1][0] * vid_conwidth.value / vid.width;
+ y2 = (vid.height - s[1][1]) * vid_conheight.value / vid.height;
+ //Con_DPrintf("R_DebugLine: %.0f,%.0f to %.0f,%.0f\n", x1, y1, x2, y2);
+
+ // add the line to the UI mesh for drawing later
+
+ // width is measured in real pixels
+ if (fabs(x2 - x1) > fabs(y2 - y1))
+ {
+ offsetx = 0;
+ offsety = 0.5f * width * vid_conheight.value / vid.height;
+ }
+ else
+ {
+ offsetx = 0.5f * width * vid_conwidth.value / vid.width;
+ offsety = 0;
+ }
+ surf = Mod_Mesh_AddSurface(mod, Mod_Mesh_GetTexture(mod, "white", 0, 0, MATERIALFLAG_VERTEXCOLOR), true);
+ e0 = Mod_Mesh_IndexForVertex(mod, surf, x1 - offsetx, y1 - offsety, 10, 0, 0, -1, 0, 0, 0, 0, r1, g1, b1, alpha1);
+ e1 = Mod_Mesh_IndexForVertex(mod, surf, x2 - offsetx, y2 - offsety, 10, 0, 0, -1, 0, 0, 0, 0, r2, g2, b2, alpha2);
+ e2 = Mod_Mesh_IndexForVertex(mod, surf, x2 + offsetx, y2 + offsety, 10, 0, 0, -1, 0, 0, 0, 0, r2, g2, b2, alpha2);
+ e3 = Mod_Mesh_IndexForVertex(mod, surf, x1 + offsetx, y1 + offsety, 10, 0, 0, -1, 0, 0, 0, 0, r1, g1, b1, alpha1);
+ Mod_Mesh_AddTriangle(mod, surf, e0, e1, e2);
+ Mod_Mesh_AddTriangle(mod, surf, e0, e2, e3);
+
+}
+
+