mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-21 20:39:57 +01:00
Optimize inner loop
This commit is contained in:
parent
c0e5c383a8
commit
b1c1650864
1 changed files with 14 additions and 10 deletions
24
s3l.h
24
s3l.h
|
@ -460,6 +460,15 @@ static inline S3L_Unit S3L_interpolateByUnitFrom0(S3L_Unit v2, S3L_Unit t)
|
||||||
return (v2 * t) / S3L_FRACTIONS_PER_UNIT;
|
return (v2 * t) / S3L_FRACTIONS_PER_UNIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Same as S3L_interpolate but with v1 = 0. Should be faster.
|
||||||
|
*/
|
||||||
|
static inline S3L_Unit S3L_interpolateFrom0(S3L_Unit v2, S3L_Unit t,
|
||||||
|
S3L_Unit tMax)
|
||||||
|
{
|
||||||
|
return (v2 * t) / tMax;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Multiplies two matrices with normalization by S3L_FRACTIONS_PER_UNIT. Result
|
Multiplies two matrices with normalization by S3L_FRACTIONS_PER_UNIT. Result
|
||||||
is stored in the first matrix.
|
is stored in the first matrix.
|
||||||
|
@ -795,14 +804,6 @@ static inline S3L_Unit S3L_interpolateBarycentric(
|
||||||
) / S3L_FRACTIONS_PER_UNIT;
|
) / S3L_FRACTIONS_PER_UNIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Same as S3L_interpolate but with v1 = 0. Should be faster.
|
|
||||||
*/
|
|
||||||
static inline int16_t S3L_interpolateFrom0(int16_t v2, int16_t t, int16_t tMax)
|
|
||||||
{
|
|
||||||
return (v2 * t) / tMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
void S3L_bresenhamInit(S3L_BresenhamState *state, int16_t x0, int16_t y0,
|
void S3L_bresenhamInit(S3L_BresenhamState *state, int16_t x0, int16_t y0,
|
||||||
int16_t x1, int16_t y1)
|
int16_t x1, int16_t y1)
|
||||||
{
|
{
|
||||||
|
@ -1174,8 +1175,11 @@ void _S3L_drawFilledTriangle(
|
||||||
S3L_correctPerspective(S3L_interpolateFrom0(S3L_FRACTIONS_PER_UNIT,
|
S3L_correctPerspective(S3L_interpolateFrom0(S3L_FRACTIONS_PER_UNIT,
|
||||||
x - lX,rowLength),&rowPC);
|
x - lX,rowLength),&rowPC);
|
||||||
|
|
||||||
*barycentric0 = S3L_interpolateByUnitFrom0(rT,rowT);
|
*barycentric0 =
|
||||||
*barycentric1 = S3L_interpolateByUnit(lT,0,rowT);
|
S3L_interpolateByUnitFrom0(rT,rowT);
|
||||||
|
|
||||||
|
*barycentric1 =
|
||||||
|
S3L_interpolateByUnitFrom0(lT,S3L_FRACTIONS_PER_UNIT - rowT);
|
||||||
#else
|
#else
|
||||||
*barycentric0 = b0 >> S3L_FAST_LERP_QUALITY;
|
*barycentric0 = b0 >> S3L_FAST_LERP_QUALITY;
|
||||||
*barycentric1 = b1 >> S3L_FAST_LERP_QUALITY;
|
*barycentric1 = b1 >> S3L_FAST_LERP_QUALITY;
|
||||||
|
|
Loading…
Reference in a new issue