diff options
Diffstat (limited to 'src/core/rasterizer.c')
-rw-r--r-- | src/core/rasterizer.c | 14 |
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*/ \ |