mirror of
https://git.coom.tech/drummyfish/small3dlib.git
synced 2024-11-21 20:39:57 +01:00
Add previous depth to pixelInfo
This commit is contained in:
parent
550b91491d
commit
29ce8352c4
2 changed files with 950 additions and 921 deletions
File diff suppressed because it is too large
Load diff
78
small3dlib.h
78
small3dlib.h
|
@ -434,6 +434,10 @@ typedef struct
|
||||||
S3L_Index triangleIndex; ///< Triangle index.
|
S3L_Index triangleIndex; ///< Triangle index.
|
||||||
S3L_Index modelIndex;
|
S3L_Index modelIndex;
|
||||||
S3L_Unit depth; ///< Depth (only if depth is turned on).
|
S3L_Unit depth; ///< Depth (only if depth is turned on).
|
||||||
|
S3L_Unit previousDepth; /**< Depth that was in the z-buffer on the pixels
|
||||||
|
position before this pixel was rasterized. This
|
||||||
|
can be used to set the value back, e.g. for
|
||||||
|
transparency. */
|
||||||
S3L_ScreenCoord triangleSize[2]; /**< Rasterized triangle width and height,
|
S3L_ScreenCoord triangleSize[2]; /**< Rasterized triangle width and height,
|
||||||
can be used e.g. for MIP mapping. */
|
can be used e.g. for MIP mapping. */
|
||||||
} S3L_PixelInfo; /**< Used to pass the info about a rasterized pixel
|
} S3L_PixelInfo; /**< Used to pass the info about a rasterized pixel
|
||||||
|
@ -534,6 +538,9 @@ void S3L_newFrame();
|
||||||
void S3L_zBufferClear();
|
void S3L_zBufferClear();
|
||||||
void S3L_stencilBufferClear();
|
void S3L_stencilBufferClear();
|
||||||
|
|
||||||
|
void S3L_zBufferWrite(S3L_ScreenCoord x, S3L_ScreenCoord y, S3L_Unit value);
|
||||||
|
S3L_Unit S3L_zBufferRead(S3L_ScreenCoord x, S3L_ScreenCoord y);
|
||||||
|
|
||||||
static inline void S3L_rotate2DPoint(S3L_Unit *x, S3L_Unit *y, S3L_Unit angle);
|
static inline void S3L_rotate2DPoint(S3L_Unit *x, S3L_Unit *y, S3L_Unit angle);
|
||||||
|
|
||||||
/** Predefined vertices of a cube to simply insert in an array. These come with
|
/** Predefined vertices of a cube to simply insert in an array. These come with
|
||||||
|
@ -561,36 +568,36 @@ static inline void S3L_rotate2DPoint(S3L_Unit *x, S3L_Unit *y, S3L_Unit angle);
|
||||||
/** Predefined triangle indices of a cube, to be used with S3L_CUBE_VERTICES
|
/** Predefined triangle indices of a cube, to be used with S3L_CUBE_VERTICES
|
||||||
and S3L_CUBE_TEXCOORDS. */
|
and S3L_CUBE_TEXCOORDS. */
|
||||||
#define S3L_CUBE_TRIANGLES\
|
#define S3L_CUBE_TRIANGLES\
|
||||||
0, 3, 2, /* front */\
|
3, 0, 2, /* front */\
|
||||||
0, 1, 3,\
|
1, 0, 3,\
|
||||||
4, 0, 2, /* right */\
|
0, 4, 2, /* right */\
|
||||||
4, 2, 6,\
|
2, 4, 6,\
|
||||||
5, 4, 6, /* back */\
|
4, 5, 6, /* back */\
|
||||||
6, 7, 5,\
|
7, 6, 5,\
|
||||||
7, 3, 1, /* left */\
|
3, 7, 1, /* left */\
|
||||||
7, 1, 5,\
|
1, 7, 5,\
|
||||||
3, 6, 2, /* top */\
|
6, 3, 2, /* top */\
|
||||||
3, 7, 6,\
|
7, 3, 6,\
|
||||||
4, 1, 0, /* bottom */\
|
1, 4, 0, /* bottom */\
|
||||||
4, 5, 1
|
5, 4, 1
|
||||||
|
|
||||||
#define S3L_CUBE_TRIANGLE_COUNT 12
|
#define S3L_CUBE_TRIANGLE_COUNT 12
|
||||||
|
|
||||||
/** Predefined texture coordinates of a cube, corresponding to triangles (NOT
|
/** Predefined texture coordinates of a cube, corresponding to triangles (NOT
|
||||||
vertices), to be used with S3L_CUBE_VERTICES and S3L_CUBE_TRIANGLES. */
|
vertices), to be used with S3L_CUBE_VERTICES and S3L_CUBE_TRIANGLES. */
|
||||||
#define S3L_CUBE_TEXCOORDS(m)\
|
#define S3L_CUBE_TEXCOORDS(m)\
|
||||||
m,m, 0,0, m,0,\
|
0,0, m,m, m,0,\
|
||||||
m,m, 0,m, 0,0,\
|
0,m, m,m, 0,0,\
|
||||||
m,0, m,m, 0,m,\
|
m,m, m,0, 0,m,\
|
||||||
m,0, 0,m, 0,0,\
|
0,m, m,0, 0,0,\
|
||||||
0,0, m,0, m,m,\
|
m,0, 0,0, m,m,\
|
||||||
m,m, 0,m, 0,0,\
|
0,m, m,m, 0,0,\
|
||||||
0,m, 0,0, m,0,\
|
0,0, 0,m, m,0,\
|
||||||
0,m, m,0, m,m,\
|
m,0, 0,m, m,m,\
|
||||||
m,m, 0,0, m,0,\
|
0,0, m,m, m,0,\
|
||||||
m,m, 0,m, 0,0,\
|
0,m, m,m, 0,0,\
|
||||||
0,m, m,0, m,m,\
|
m,0, 0,m, m,m,\
|
||||||
0,m, 0,0, m,0
|
0,0, 0,m, m,0
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// privates
|
// privates
|
||||||
|
@ -633,6 +640,26 @@ static inline int8_t S3L_zTest(
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
S3L_Unit S3L_zBufferRead(S3L_ScreenCoord x, S3L_ScreenCoord y)
|
||||||
|
{
|
||||||
|
#if S3L_Z_BUFFER
|
||||||
|
return S3L_zBuffer[y * S3L_RESOLUTION_X + x];
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void S3L_zBufferWrite(S3L_ScreenCoord x, S3L_ScreenCoord y, S3L_Unit value)
|
||||||
|
{
|
||||||
|
#if S3L_Z_BUFFER
|
||||||
|
uint32_t index = y * S3L_RESOLUTION_X + x;
|
||||||
|
|
||||||
|
value = S3L_zBufferFormat(value);
|
||||||
|
|
||||||
|
S3L_zBuffer[y * S3L_RESOLUTION_X + x] = value;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#if S3L_STENCIL_BUFFER
|
#if S3L_STENCIL_BUFFER
|
||||||
#define S3L_STENCIL_BUFFER_SIZE\
|
#define S3L_STENCIL_BUFFER_SIZE\
|
||||||
((S3L_RESOLUTION_X * S3L_RESOLUTION_Y - 1) / 8 + 1)
|
((S3L_RESOLUTION_X * S3L_RESOLUTION_Y - 1) / 8 + 1)
|
||||||
|
@ -1345,6 +1372,7 @@ void S3L_initPixelInfo(S3L_PixelInfo *p) // TODO: maybe non-pointer for p
|
||||||
p->barycentric[2] = 0;
|
p->barycentric[2] = 0;
|
||||||
p->triangleIndex = 0;
|
p->triangleIndex = 0;
|
||||||
p->depth = 0;
|
p->depth = 0;
|
||||||
|
p->previousDepth = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void S3L_initDrawConfig(S3L_DrawConfig *config)
|
void S3L_initDrawConfig(S3L_DrawConfig *config)
|
||||||
|
@ -1871,6 +1899,8 @@ void S3L_drawTriangle(
|
||||||
#if S3L_Z_BUFFER
|
#if S3L_Z_BUFFER
|
||||||
if (!S3L_zTest(p.x,p.y,p.depth))
|
if (!S3L_zTest(p.x,p.y,p.depth))
|
||||||
testsPassed = 0;
|
testsPassed = 0;
|
||||||
|
|
||||||
|
p.previousDepth = S3L_zBuffer[p.y * S3L_RESOLUTION_X + p.x];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (testsPassed)
|
if (testsPassed)
|
||||||
|
|
Loading…
Reference in a new issue