mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-23 20:59:58 +01:00
Optimize helper functions
This commit is contained in:
parent
2483fb05d4
commit
7c5f93fac1
3 changed files with 15 additions and 5 deletions
|
@ -346,7 +346,7 @@ void setModel(uint8_t index)
|
|||
|
||||
#undef modelCase
|
||||
|
||||
S3L_initTransoform3D(&(scene.models[0].transform));
|
||||
S3L_initTransform3D(&(scene.models[0].transform));
|
||||
S3L_initDrawConfig(&(scene.models[0].config));
|
||||
|
||||
if (index == 3)
|
||||
|
|
|
@ -6,7 +6,11 @@
|
|||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#define S3L_PIXEL_FUNCTION pixelFunc
|
||||
#define S3L_RESOLUTION_X 100
|
||||
#define S3L_RESOLUTION_Y 100
|
||||
|
||||
#include "../small3dlib.h"
|
||||
|
||||
#define TEST_BUFFER_W 16
|
||||
|
|
14
small3dlib.h
14
small3dlib.h
|
@ -10,7 +10,7 @@
|
|||
license: CC0 1.0 (public domain)
|
||||
found at https://creativecommons.org/publicdomain/zero/1.0/
|
||||
+ additional waiver of all IP
|
||||
version: 0.851
|
||||
version: 0.852
|
||||
|
||||
Before including the library, define S3L_PIXEL_FUNCTION to the name of the
|
||||
function you'll be using to draw single pixels (this function will be called
|
||||
|
@ -568,6 +568,7 @@ static inline S3L_Unit S3L_max(S3L_Unit v1, S3L_Unit v2);
|
|||
static inline S3L_Unit S3L_clamp(S3L_Unit v, S3L_Unit v1, S3L_Unit v2);
|
||||
static inline S3L_Unit S3L_wrap(S3L_Unit value, S3L_Unit mod);
|
||||
static inline S3L_Unit S3L_nonZero(S3L_Unit value);
|
||||
static inline S3L_Unit S3L_zeroClamp(S3L_Unit value);
|
||||
|
||||
S3L_Unit S3L_sin(S3L_Unit x);
|
||||
S3L_Unit S3L_asin(S3L_Unit x);
|
||||
|
@ -1205,7 +1206,7 @@ void S3L_vec3Xmat4(S3L_Vec4 *v, S3L_Mat4 *m)
|
|||
|
||||
S3L_Unit S3L_abs(S3L_Unit value)
|
||||
{
|
||||
return value >= 0 ? value : -1 * value;
|
||||
return value * (((value >= 0) << 1) - 1);
|
||||
}
|
||||
|
||||
S3L_Unit S3L_min(S3L_Unit v1, S3L_Unit v2)
|
||||
|
@ -1223,6 +1224,11 @@ S3L_Unit S3L_clamp(S3L_Unit v, S3L_Unit v1, S3L_Unit v2)
|
|||
return v >= v1 ? (v <= v2 ? v : v2) : v1;
|
||||
}
|
||||
|
||||
S3L_Unit S3L_zeroClamp(S3L_Unit value)
|
||||
{
|
||||
return (value * (value >= 0));
|
||||
}
|
||||
|
||||
S3L_Unit S3L_wrap(S3L_Unit value, S3L_Unit mod)
|
||||
{
|
||||
return value >= 0 ? (value % mod) : (mod + (value % mod) - 1);
|
||||
|
@ -1230,7 +1236,7 @@ S3L_Unit S3L_wrap(S3L_Unit value, S3L_Unit mod)
|
|||
|
||||
S3L_Unit S3L_nonZero(S3L_Unit value)
|
||||
{
|
||||
return value != 0 ? value : 1;
|
||||
return (value + (value == 0));
|
||||
}
|
||||
|
||||
S3L_Unit S3L_interpolate(S3L_Unit v1, S3L_Unit v2, S3L_Unit t, S3L_Unit tMax)
|
||||
|
@ -2600,7 +2606,7 @@ void S3L_drawScene(S3L_Scene scene)
|
|||
S3L_sortArray[S3L_sortArrayLength].modelIndex = modelIndex;
|
||||
S3L_sortArray[S3L_sortArrayLength].triangleIndex = triangleIndex;
|
||||
S3L_sortArray[S3L_sortArrayLength].sortValue =
|
||||
S3L_max(0,(transformed0.w + transformed1.w + transformed2.w)) >> 2;
|
||||
S3L_zeroClamp(transformed0.w + transformed1.w + transformed2.w) >> 2;
|
||||
/* ^
|
||||
The w component here stores non-clamped z.
|
||||
|
||||
|
|
Loading…
Reference in a new issue