+ /*
+ int i, k, lindex, lnumverts;
+ medge_t *pedges, *r_pedge;
+ int vertpage, points;
+ float *vec;
+ float s, t;
+ glpoly_t *poly;
+ float point1[1024][VERTEXSIZE], point[1024][VERTEXSIZE];
+
+// reconstruct the polygon
+ pedges = currentmodel->edges;
+ lnumverts = fa->numedges;
+ vertpage = 0;
+
+ //
+ // draw texture
+ //
+ for (i=0 ; i<lnumverts ; i++)
+ {
+ lindex = currentmodel->surfedges[fa->firstedge + i];
+
+ if (lindex > 0)
+ {
+ r_pedge = &pedges[lindex];
+ vec = r_pcurrentvertbase[r_pedge->v[0]].position;
+ }
+ else
+ {
+ r_pedge = &pedges[-lindex];
+ vec = r_pcurrentvertbase[r_pedge->v[1]].position;
+ }
+ s = DotProduct (vec, fa->texinfo->vecs[0]) + fa->texinfo->vecs[0][3];
+ s /= fa->texinfo->texture->width;
+
+ t = DotProduct (vec, fa->texinfo->vecs[1]) + fa->texinfo->vecs[1][3];
+ t /= fa->texinfo->texture->height;
+
+ VectorCopy (vec, point1[i]);
+ point1[i][3] = s;
+ point1[i][4] = t;
+
+ //
+ // lightmap texture coordinates
+ //
+ s = DotProduct (vec, fa->texinfo->vecs[0]) + fa->texinfo->vecs[0][3];
+ s -= fa->texturemins[0];
+ point1[i][7] = bound(0l, ((int)s>>4), (fa->extents[0]>>4)); // LordHavoc: raw lightmap coordinates
+ s += fa->light_s*16;
+ s += 8;
+ s /= BLOCK_WIDTH*16; //fa->texinfo->texture->width;
+
+ t = DotProduct (vec, fa->texinfo->vecs[1]) + fa->texinfo->vecs[1][3];
+ t -= fa->texturemins[1];
+ point1[i][8] = bound(0l, ((int)t>>4), (fa->extents[1]>>4)); // LordHavoc: raw lightmap coordinates
+ t += fa->light_t*16;
+ t += 8;
+ t /= BLOCK_HEIGHT*16; //fa->texinfo->texture->height;
+
+ point1[i][5] = s;
+ point1[i][6] = t;
+ }
+
+ if (fa->flags & (SURF_DRAWSKY | SURF_DRAWTURB))
+ {
+ poly = Hunk_Alloc (sizeof(glpoly_t) + (lnumverts-4) * VERTEXSIZE*sizeof(float));
+ poly->next = fa->polys;
+ poly->flags = fa->flags;
+ fa->polys = poly;
+ poly->numverts = lnumverts;
+ memcpy(poly->verts, &point1[0][0], lnumverts*VERTEXSIZE*sizeof(float));
+ return;
+ }
+
+#define VectorCopy9(a,b) {for(k = 0;k < VERTEXSIZE;k++) b[k]=a[k];}
+ points = 0;
+#if 0
+ int j;
+ float center[VERTEXSIZE];
+ // subdivide by placing a point at the center (more tris)
+ // LordHavoc:
+ // you, the reader, have stumbled upon the most amusing visual artifact I have
+ // encountered to date, saved here for historical/hysterical reasons :)
+ if (gl_funnywalls.value)
+ for (j = 0;j < 5;j++)
+ center[j] = 0;
+ else
+ for (j = 0;j < VERTEXSIZE;j++)
+ center[j] = 0;
+ for (i = 0;i < lnumverts;i++)
+ for (j = 0;j < VERTEXSIZE;j++)
+ center[j] += point1[i][j];
+ s = 1.0f / lnumverts;
+ for (i = 0;i < VERTEXSIZE;i++)
+ center[i] *= s;
+ for (i = 0;i < lnumverts;i++)
+ {
+ VectorCopy9(center, point[points]);points++;
+ VectorCopy9(point1[i], point[points]);points++;
+ VectorCopy9(point1[(i+1)%lnumverts], point[points]);points++;
+ }
+#else
+ // subdivide by turning it into a fan (less tris)
+ for (i = 1;i < lnumverts-1;i++)
+ {
+ VectorCopy9(point1[0], point[points]);points++;
+ VectorCopy9(point1[i], point[points]);points++;
+ VectorCopy9(point1[i+1], point[points]);points++;
+ }
+#endif
+#if 0
+ {
+ float p1[VERTEXSIZE], p2[VERTEXSIZE], p3[VERTEXSIZE], p4[VERTEXSIZE], p5[VERTEXSIZE], p6[VERTEXSIZE]
+ // now subdivide any large triangles
+ for (j = 0;j < points;j+=3)
+ {
+ if (points > (1024-9))
+ break;
+ while ((max(point[j][0], max(point[j+1][0], point[j+2][0])) - min(point[j][0], min(point[j+1][0], point[j+2][0]))) > 128
+ || (max(point[j][1], max(point[j+1][1], point[j+2][1])) - min(point[j][1], min(point[j+1][1], point[j+2][1]))) > 128
+ || (max(point[j][2], max(point[j+1][2], point[j+2][2])) - min(point[j][2], min(point[j+1][2], point[j+2][2]))) > 128)
+ {
+ if (points > (1024-9))
+ break;
+ #define halfway(v, a, b) for (k = 0;k < VERTEXSIZE;k++) v[k] = (a[k] + b[k]) * 0.5f;
+ VectorCopy9(point[j+0], p1);
+ VectorCopy9(point[j+1], p3);
+ VectorCopy9(point[j+2], p5);
+ halfway(p2, p1, p3);
+ halfway(p4, p3, p5);
+ halfway(p6, p5, p1);
+ // build tri 1 (top middle)
+ VectorCopy9(p1, point[j+0]);
+ VectorCopy9(p2, point[j+1]);
+ VectorCopy9(p6, point[j+2]);
+ // build tri 2 (bottom right)
+ VectorCopy9(p2, point[points+0]);
+ VectorCopy9(p3, point[points+1]);
+ VectorCopy9(p4, point[points+2]);
+ // build tri 3 (bottom left)
+ VectorCopy9(p4, point[points+3]);
+ VectorCopy9(p5, point[points+4]);
+ VectorCopy9(p6, point[points+5]);
+ // build tri 4 (middle)
+ VectorCopy9(p2, point[points+6]);
+ VectorCopy9(p4, point[points+7]);
+ VectorCopy9(p6, point[points+8]);
+ points+=9;
+ }
+ }
+ }
+#endif
+ poly = Hunk_Alloc (sizeof(glpoly_t) + (points-4) * VERTEXSIZE*sizeof(float));
+ poly->next = fa->polys;
+ poly->flags = fa->flags;
+ fa->polys = poly;
+ poly->numverts = 0;
+ poly->numtris = points / 3;
+ memcpy(&poly->verts[0][0], &point[0][0], points * VERTEXSIZE*sizeof(float));
+ */