le3d - LightEngine 3D
A straightforward C++ 3D software engine for real-time graphics
flattexalphazc.h
Go to the documentation of this file.
1 
33 inline void LeRasterizer::fillFlatTexAlphaZC(int y, int x1, int x2, int w1, int w2, int u1, int u2, int v1, int v2)
34 {
35  uint8_t * sc = (uint8_t *) &curTriangle->solidColor;
36 
37  int d = x2 - x1;
38  if (d == 0) return;
39 
40  int au = (u2 - u1) / d;
41  int av = (v2 - v1) / d;
42  int aw = (w2 - w1) / d;
43 
44  if (++x2 > frame.tx) x2 = frame.tx;
45  uint8_t * p = (uint8_t *) (x1 + y * frame.tx + pixels);
46 
47  for (int x = x1; x < x2; x++) {
48  int32_t z = (1 << 30) / (w1 >> 8);
49  uint32_t tu = (((int64_t) u1 * z) >> 24) & texMaskU;
50  uint32_t tv = (((int64_t) v1 * z) >> 24) & texMaskV;
51  uint8_t * t = (uint8_t *) &texDiffusePixels[tu + (tv << texSizeU)];
52 
53  uint16_t a = 256 - t[3];
54  p[0] = (p[0] * a + t[0] * sc[0]) >> 8;
55  p[1] = (p[1] * a + t[1] * sc[1]) >> 8;
56  p[2] = (p[2] * a + t[2] * sc[2]) >> 8;
57  p += 4;
58 
59  u1 += au;
60  v1 += av;
61  w1 += aw;
62  }
63 }
LeColor solidColor
Definition: trilist.h:83
int tx
Definition: bitmap.h:81
LeBitmap frame
Definition: rasterizer_float.h:61