From a8be33cd50b5f477f047e845426047da332d6273 Mon Sep 17 00:00:00 2001 From: Stefan Strogin Date: Fri, 14 Feb 2020 03:55:13 +0200 Subject: [PATCH] Fix fixed point math functions (from media-libs/allegro) Bug: https://bugs.gentoo.org/697090 Upstream-Status: Inappropriate [no upstream] Signed-off-by: Stefan Strogin --- hgrcos.c | 2 +- rec.c | 58 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/hgrcos.c b/hgrcos.c index c65b469..442b18f 100644 --- a/hgrcos.c +++ b/hgrcos.c @@ -34,5 +34,5 @@ fixed hgrsin(fixed theta) fixed hgrtan(fixed theta) { - return fdiv(hgrcos(theta + 0xc00000), hgrcos(theta)); + return fixdiv(hgrcos(theta + 0xc00000), hgrcos(theta)); } diff --git a/rec.c b/rec.c index bf6df2e..d02830a 100644 --- a/rec.c +++ b/rec.c @@ -214,7 +214,7 @@ void SetupLight1(void) { if(line[x] == c1) { - fixed f = fsqrt((x - 128) * (x - 128) + (y - 128) * (y - 128)); /* between 0 and 2 */ + fixed f = fixsqrt((x - 128) * (x - 128) + (y - 128) * (y - 128)); /* between 0 and 2 */ fixed cosine = hgrcos(f << 10); unsigned c = (cosine + 0x10000 + rand() % 0x1000) * 15 / 32768; if(c > 63) @@ -223,8 +223,8 @@ void SetupLight1(void) } else if(line[x] == c2) { - fixed f = fsqrt((x - 128) * (x - 128) + (y - 128) * (y - 128)) + - (fcos(x << 20) + fcos(y << 20)) / 64 + 0x10000; + fixed f = fixsqrt((x - 128) * (x - 128) + (y - 128) * (y - 128)) + + (fixcos(x << 20) + fixcos(y << 20)) / 64 + 0x10000; /* between 0 and 4 */ fixed cosine = hgrcos(f << 11); unsigned c = (cosine + 0x10000 + rand() % 0x1000) * 15 / 32768; @@ -264,10 +264,10 @@ void ThetaLight(fixed theta) * 3 4 * 567 */ - zpixel[1] = THETALIGHT_AMBIENT + fmul(THETALIGHT_POWER, s); - zpixel[3] = THETALIGHT_AMBIENT + fmul(THETALIGHT_POWER, 0x10000 - c); - zpixel[4] = THETALIGHT_AMBIENT + fmul(THETALIGHT_POWER, c); - zpixel[6] = THETALIGHT_AMBIENT + fmul(THETALIGHT_POWER, 0x10000 - s); + zpixel[1] = THETALIGHT_AMBIENT + fixmul(THETALIGHT_POWER, s); + zpixel[3] = THETALIGHT_AMBIENT + fixmul(THETALIGHT_POWER, 0x10000 - c); + zpixel[4] = THETALIGHT_AMBIENT + fixmul(THETALIGHT_POWER, c); + zpixel[6] = THETALIGHT_AMBIENT + fixmul(THETALIGHT_POWER, 0x10000 - s); zpixel[0] = (zpixel[1] + zpixel[3])/2; zpixel[2] = (zpixel[1] + zpixel[4])/2; @@ -304,20 +304,20 @@ void InitSidesPhi(Seven *seven, fixed phi, fixed zBase) fixed m, zCos; int scanlineWidth = 160 / nPlayers; - if(fcos(phi) == 0) + if(fixcos(phi) == 0) { phi -= 0x8000; } - zCos = fdiv(zBase, hgrcos(phi)); + zCos = fixdiv(zBase, hgrcos(phi)); m = hgrtan(phi); for(i = 0; i < wHt; i++) { - fixed scanline = fdiv(i - wHt / 2, wHt / 2); - fixed mline = fmul(m, scanline); - fixed zLine = fmul(zCos, scanline); - fixed y1 = fdiv(zLine, mline + 0x10000); - fixed x1 = fdiv(zBase, mline + 0x10000); + fixed scanline = fixdiv(i - wHt / 2, wHt / 2); + fixed mline = fixmul(m, scanline); + fixed zLine = fixmul(zCos, scanline); + fixed y1 = fixdiv(zLine, mline + 0x10000); + fixed x1 = fixdiv(zBase, mline + 0x10000); if(x1 < 0) { @@ -391,10 +391,10 @@ void RotateSides(Seven *seven, int theta) ly = seven->leftY[i]; ry = seven->rightY[i]; - seven->leftX[i] = fmul(lx, c) - fmul(ly, s); - seven->rightX[i] = fmul(rx, c) - fmul(ry, s); - seven->leftY[i] = fmul(ly, c) + fmul(lx, s); - seven->rightY[i] = fmul(ry, c) + fmul(rx, s); + seven->leftX[i] = fixmul(lx, c) - fixmul(ly, s); + seven->rightX[i] = fixmul(rx, c) - fixmul(ry, s); + seven->leftY[i] = fixmul(ly, c) + fixmul(lx, s); + seven->rightY[i] = fixmul(ry, c) + fixmul(rx, s); } } @@ -405,10 +405,10 @@ void ScaleSides(Seven *seven, int fac) for(i = 0; i < wHt; i++) { - seven->leftX[i] = fmul(seven->leftX[i], fac); - seven->leftY[i] = fmul(seven->leftY[i], fac); - seven->rightX[i] = fmul(seven->rightX[i], fac); - seven->rightY[i] = fmul(seven->rightY[i], fac); + seven->leftX[i] = fixmul(seven->leftX[i], fac); + seven->leftY[i] = fixmul(seven->leftY[i], fac); + seven->rightX[i] = fixmul(seven->rightX[i], fac); + seven->rightY[i] = fixmul(seven->rightY[i], fac); } } @@ -446,22 +446,22 @@ void DisplaceScanlines(Seven *seven, int ticks, { y = i - wHt / 2; xOff = ((a * y / wHt + b) * y / wHt + c) * y / wHt + d + - fmul(hgrcos(theta), amplitude); - xOff += fmul((rand() & 0x7ff) - 0x400, noise); + fixmul(hgrcos(theta), amplitude); + xOff += fixmul((rand() & 0x7ff) - 0x400, noise); theta += dtheta; heatTheta += dheat; - yOff = fmul(hgrsin(heatTheta), heat); + yOff = fixmul(hgrsin(heatTheta), heat); lx = seven->leftX[i]; rx = seven->rightX[i]; ly = seven->leftY[i]; ry = seven->rightY[i]; - seven->leftX[i] = lx + fmul(rx - lx, xOff) - fmul(ry - ly, yOff); - seven->rightX[i] = rx + fmul(rx - lx, xOff) - fmul(ry - ly, yOff); - seven->leftY[i] = ly + fmul(ry - ly, xOff) + fmul(rx - lx, yOff); - seven->rightY[i] = ry + fmul(ry - ly, xOff) + fmul(rx - lx, yOff); + seven->leftX[i] = lx + fixmul(rx - lx, xOff) - fixmul(ry - ly, yOff); + seven->rightX[i] = rx + fixmul(rx - lx, xOff) - fixmul(ry - ly, yOff); + seven->leftY[i] = ly + fixmul(ry - ly, xOff) + fixmul(rx - lx, yOff); + seven->rightY[i] = ry + fixmul(ry - ly, xOff) + fixmul(rx - lx, yOff); } } -- 2.25.0