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.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/core/rasterizer.c b/src/core/rasterizer.c
index d39e246..bf210b7 100644
--- a/src/core/rasterizer.c
+++ b/src/core/rasterizer.c
@@ -210,7 +210,7 @@ void ssrR_triangle(
s[1].x = sc->y - sa->y; s[1].y = sb->y - sa->y;
#define RENDER_TRIANGLE \
- for (p.y = FROM->y; p.y < TO->y; ++p.y) { \
+ for (p.y = FROM->y; p.y < TO->y + OFFSET; ++p.y) { \
SET_FROM_AND_TO \
s[1].z = sa->y - p.y; \
for (p.x = from; order * (p.x - to) <= 0; p.x += order) { \
@@ -226,8 +226,10 @@ void ssrR_triangle(
bcp.x *= CAw; bcp.y *= CBw; bcp.z *= CCw; \
vec3_scale(&bcp, 1.f / (bcp.x + bcp.y + bcp.z), &bcp); \
/*depth test*/ \
- depth = (bcp.x*sa->z+bcp.y*sb->z+bcp.z*sc->z) * 0.5f + 0.5f; \
- discardif(!ssr_testdepthf(p.x, p.y, depth)); \
+ if(ssr_isenable(ENABLEMASK_DEPTHTEST)){ \
+ depth = (bcp.x*sa->z+bcp.y*sb->z+bcp.z*sc->z) * 0.5f + 0.5f;\
+ discardif(!ssr_testdepthf(p.x, p.y, depth)); \
+ } \
/*set varying variables*/ \
DO_INTERPOLATION \
if(program->fragmentshader(uniforms, &ssr_frag_in, &color)) \
@@ -239,6 +241,7 @@ void ssrR_triangle(
#define TO sb
#define FROMK invkAC
#define TOK invkAB
+#define OFFSET 0
#define SET_FROM_AND_TO \
from = (int)(invkAC * (p.y - sa->y) + sa->x); \
to = (int)(invkAB * (p.y - sa->y) + sa->x); \
@@ -249,6 +252,7 @@ void ssrR_triangle(
#define TO sc
#define FROMK invkAC
#define TOK invkBC
+#define OFFSET 1
#define SET_FROM_AND_TO \
if (p.y == sb->y && sb->y == sc->y) { \
from = sc->x; \
@@ -265,6 +269,7 @@ void ssrR_triangle(
#undef TO
#undef FROMK
#undef TOK
+#undef OFFSET
#undef SET_FROM_AND_TO
#undef RENDER_TRIANGLE
}