33 inline void LeRasterizer::fillFlatTexAlphaZCFog(
int y,
int x1,
int x2,
int w1,
int w2,
int u1,
int u2,
int v1,
int v2)
35 uint8_t * sc = (uint8_t *)&curTriangle->
solidColor;
36 uint8_t * fc = (uint8_t *)&curTrilist->
fog.
color;
41 int au = (u2 - u1) / d;
42 int av = (v2 - v1) / d;
43 int aw = (w2 - w1) / d;
45 const float sw = 0x1p8;
46 int32_t znear = (int32_t)(curTrilist->
fog.
near * sw);
47 int32_t zfar = (int32_t)(curTrilist->
fog.
far * sw);
48 int32_t zscale = (1 << 30) / (zfar - znear);
51 uint8_t * p = (uint8_t *)(x1 + y *
frame.
tx + pixels);
53 for (
int x = x1; x < x2; x++) {
54 int32_t z = (1 << 30) / (w1 >> 8);
55 uint32_t tu = (((int64_t)u1 * z) >> 24) & texMaskU;
56 uint32_t tv = (((int64_t)v1 * z) >> 24) & texMaskV;
57 uint8_t * t = (uint8_t *)&texDiffusePixels[tu + (tv << texSizeU)];
59 int32_t ff = ((int64_t)(z - znear) * zscale) >> 15;
61 ff =
cmmin((1 << 15), ff);
62 int fb = (ff * ff) >> (14 + 8);
70 r = r + (((fc[0] * n - r) * fb) >> 8);
71 g = g + (((fc[1] * n - g) * fb) >> 8);
72 b = b + (((fc[2] * n - b) * fb) >> 8);
74 p[0] = (p[0] * a + r) >> 8;
75 p[1] = (p[1] * a + g) >> 8;
76 p[2] = (p[2] * a + b) >> 8;
LeColor color
Definition: trilist.h:53
LeColor solidColor
Definition: trilist.h:83
#define cmmin(a, b)
Definition: global.h:45
int tx
Definition: bitmap.h:81
LeBitmap frame
Definition: rasterizer_float.h:61
float near
Definition: trilist.h:54
LeFog fog
Definition: trilist.h:103
float far
Definition: trilist.h:55
#define cmmax(a, b)
Definition: global.h:44