le3d - LightEngine 3D
A straightforward C++ 3D software engine for real-time graphics
flattexzc.h
Go to the documentation of this file.
1 
33 inline void LeRasterizer::fillFlatTexZC(int y, int x1, int x2, int w1, int w2, int u1, int u2, int v1, int v2)
34 {
35  int d = x2 - x1;
36  if (d == 0) return;
37 
38  int au = (u2 - u1) / d;
39  int av = (v2 - v1) / d;
40  int aw = (w2 - w1) / d;
41 
42  if (++x2 > frame.tx) x2 = frame.tx;
43  LeColor * p = x1 + y * frame.tx + pixels;
44 
45  for (int x = x1; x < x2; x ++) {
46  int32_t z = (1 << 30) / (w1 >> 8);
47  uint32_t tu = (((int64_t) u1 * z) >> 24) & texMaskU;
48  uint32_t tv = (((int64_t) v1 * z) >> 24) & texMaskV;
49 
50  __m128i zv = _mm_set1_epi32(0);
51  __m128i tp;
52  tp = _mm_loadl_epi64((__m128i *) &texDiffusePixels[tu + (tv << texSizeU)]);
53  tp = _mm_unpacklo_epi8(tp, zv);
54  tp = _mm_mullo_epi16(tp, color_4);
55  tp = _mm_srli_epi16(tp, 8);
56  tp = _mm_packus_epi16(tp, zv);
57  *p++ = _mm_cvtsi128_si32(tp);
58 
59  u1 += au;
60  v1 += av;
61  w1 += aw;
62  }
63 }
int tx
Definition: bitmap.h:81
LeBitmap frame
Definition: rasterizer_float.h:61
Represent an RGBA color.
Definition: color.h:42