summaryrefslogtreecommitdiff
path: root/src/core/rasterizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/rasterizer.c')
-rw-r--r--src/core/rasterizer.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/rasterizer.c b/src/core/rasterizer.c
index a7d3544..d6a9fc1 100644
--- a/src/core/rasterizer.c
+++ b/src/core/rasterizer.c
@@ -92,17 +92,17 @@ void ssrR_triangle(
) {
ssr_assert(CA && CB && CC && program);
- Vec3 SA, SB, SC;
- vec4_dividew(CA, &SA); ssrU_viewport(&SA, &SA);
- vec4_dividew(CB, &SB); ssrU_viewport(&SB, &SB);
- vec4_dividew(CC, &SC); ssrU_viewport(&SC, &SC);
+ Vec4 SA, SB, SC;
+ vec4_dividewnoz(CA, &SA); ssrU_viewport(&SA, &SA);
+ vec4_dividewnoz(CB, &SB); ssrU_viewport(&SB, &SB);
+ vec4_dividewnoz(CC, &SC); ssrU_viewport(&SC, &SC);
/*
puttriangle(&SA, &SB, &SC, 0xffff0000);
return;
*/
- Vec3 *sa = &SA, *sb = &SB, *sc = &SC, *tmp;
+ Vec4 *sa = &SA, *sb = &SB, *sc = &SC, *tmp;
Vec4 *v4tmp;
uint itmp;
#define swap(t, a, b) {t = a; a = b; b = t;} /*sort in y axis*/
@@ -163,7 +163,9 @@ void ssrR_triangle(
vec3_scale(&bc, 1.f / (bc.x + bc.y + bc.z), &bc); \
/*early depth testing*/ \
if(depth_test){ \
- depth = bc.x*sa->z+bc.y*sb->z+bc.z*sc->z; \
+ depth = bc.x*sa->z + bc.y*sb->z + bc.z*sc->z; \
+ depth /= bc.x*sa->w + bc.y*sb->w + bc.z*sc->w; \
+ /*depth = bc.x*sa->z+bc.y*sb->z+bc.z*sc->z;*//*wrong*/ \
pass_depth_test = ssr_testdepth(p.x, p.y, depth); \
} \
/*early stencil testing*/ \