convert line ends
[canaan.git] / prj / tech / libsrc / g2 / lmap.c
blobc9137784f3228672231a089a50c0adf41b425cbe
1 /*
2 * $Source: s:/prj/tech/libsrc/g2/RCS/lmap.c $
3 * $Revision: 1.1 $
4 * $Author: KEVIN $
5 * $Date: 1996/04/10 17:35:10 $
7 * Linear mapper shell.
9 * This file is part of the g2 library.
13 #include <tmapd.h>
14 #include <tmapfcn.h>
15 #include <raster.h>
16 #include <buffer.h>
17 #include <mprintf.h>
19 void lmap_shell(grs_vertex **vpl)
21 grs_vertex *vp=vpl[0];
22 grs_raster *r0, *r;
23 g2s_tmap_info *ti;
24 fix u0, v0;
25 int x0, y0, y_max;
27 g2_calc_deltas(vpl, TMF_CALC_UV);
28 r0 = gr_rasterize(vpl, 3, NULL);
29 if (r0==NULL)
30 return;
31 ti = &g2d_tmap_info;
32 x0 = fix_int(vp->x);
33 y0 = fix_int(vp->y);
34 u0 = vp->u - fix_mul(fix_frac(vp->x), ti->dux)
35 - fix_mul(fix_frac(vp->y), ti->duy);
36 v0 = vp->v - fix_mul(fix_frac(vp->x), ti->dvx)
37 - fix_mul(fix_frac(vp->y), ti->dvy);
38 ti->y = r0->left;
39 y_max = r0->right;
40 ti->p_dest = grd_bm.bits + ti->y*grd_bm.row;
41 r = r0+1;
42 u0 += ti->duy*(ti->y-y0);
43 v0 += ti->dvy*(ti->y-y0);
45 while (ti->y<y_max) {
46 int dx = r->left-x0;
47 fix u = u0 + dx*ti->dux;
48 fix v = v0 + dx*ti->dvx;
49 ti->il_func(r->left, r->right, u, v);
50 u0 += ti->duy;
51 v0 += ti->dvy;
52 ti->y++;
53 r++;
55 gr_free_temp(r0);
58 void lit_lmap_shell(grs_vertex **vpl)
60 grs_vertex *vp=vpl[0];
61 grs_raster *r0, *r;
62 g2s_tmap_info *ti;
63 fix u0, v0, i0;
64 int x0, y0, y_max;
66 g2_calc_deltas(vpl, TMF_CALC_UVI);
67 r0 = gr_rasterize(vpl, 3, NULL);
68 if (r0==NULL)
69 return;
70 ti = &g2d_tmap_info;
71 x0 = fix_int(vp->x);
72 y0 = fix_int(vp->y);
73 u0 = vp->u - fix_mul(fix_frac(vp->x), ti->dux)
74 - fix_mul(fix_frac(vp->y), ti->duy);
75 v0 = vp->v - fix_mul(fix_frac(vp->x), ti->dvx)
76 - fix_mul(fix_frac(vp->y), ti->dvy);
77 i0 = vp->i - fix_mul(fix_frac(vp->x), ti->dix)
78 - fix_mul(fix_frac(vp->y), ti->diy);
79 ti->y = r0->left;
80 y_max = r0->right;
81 ti->p_dest = grd_bm.bits + ti->y*grd_bm.row;
82 r = r0+1;
83 u0 += ti->duy*(ti->y-y0);
84 v0 += ti->dvy*(ti->y-y0);
85 i0 += ti->diy*(ti->y-y0);
87 while (ti->y<y_max) {
88 int dx = r->left-x0;
89 fix u = u0 + dx*ti->dux;
90 fix v = v0 + dx*ti->dvx;
91 ti->i = i0 + dx*ti->dix;
92 ti->il_func(r->left, r->right, u, v);
93 u0 += ti->duy;
94 v0 += ti->dvy;
95 i0 += ti->diy;
96 ti->y++;
97 r++;
99 gr_free_temp(r0);