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.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/src/core/rasterizer.c b/src/core/rasterizer.c
index 772eb29..aad29e9 100644
--- a/src/core/rasterizer.c
+++ b/src/core/rasterizer.c
@@ -123,21 +123,10 @@ void ssrR_triangle( Vec4* CA, Vec4* CB, Vec4* CC, Vert* A, Vert* B, Vert* C, Pro
s[0].x = sc->x - sa->x; s[0].y = sb->x - sa->x;
s[1].x = sc->y - sa->y; s[1].y = sb->y - sa->y;
- bool depth_test = ssr_isenable(ENABLEMASK_DEPTHTEST);
- bool multi_sample = ssr_isenable(ENABLEMASK_MULTISAMPLE);
- bool blend = ssr_isenable(ENABLEMASK_BLEND);
- bool write_depth = ssr_isenable(ENABLEMASK_WRITEDEPTH);
-
-#define DO_INTERPOLATION \
- if (varying_flag & VARYING_BASIC) { \
- if (varying_flag & VARYING_POSITION) ssrS_bcpvec3(&bc, &A->position, &B->position, &C->position, &ssr_frag_in.position); \
- if (varying_flag & VARYING_NORMAL) ssrS_bcpvec3(&bc, &A->normal, &B->normal, &C->normal, &ssr_frag_in.normal); \
- if (varying_flag & VARYING_TANGENT) ssrS_bcpvec3(&bc, &A->tangent, &B->tangent, &C->tangent, &ssr_frag_in.tangent); \
- if (varying_flag & VARYING_TEXCOORD) ssrS_bcpvec2(&bc, &A->texcoord, &B->texcoord, &C->texcoord, &ssr_frag_in.texcoord); \
-/* if (varying_flag & VARYING_JOINT) ssrS_bcpvec4(&bc, &A->joint, &B->joint, &C->joint, &ssr_frag_in.joint); \
- if (varying_flag & VARYING_WEIGHT) ssrS_bcpvec4(&bc, &A->weight, &B->weight, &C->weight, &ssr_frag_in.weight); \
- */ if (varying_flag & VARYING_COLOR) ssrS_bcpcolor(&bc, A->color, B->color, C->color, &ssr_frag_in.color); \
- }
+ bool depth_test = ssr_isenable(ENABLE_DEPTHTEST);
+ bool multi_sample = ssr_isenable(ENABLE_MULTISAMPLE);
+ bool blend = ssr_isenable(ENABLE_BLEND);
+ bool write_depth = ssr_isenable(ENABLE_WRITEDEPTH);
#define RENDER_TRIANGLE \
for (p.y = FROM->y; p.y < TO->y + OFFSET; ++p.y) { \
@@ -161,7 +150,7 @@ void ssrR_triangle( Vec4* CA, Vec4* CB, Vec4* CC, Vert* A, Vert* B, Vert* C, Pro
discardif(!ssr_testdepth(p.x, p.y, depth)); \
} \
/*set varying variables*/ \
- DO_INTERPOLATION \
+ ssrS_solveprops(varying_flag, &bc, A, B, C); \
ssrS_solveregs(&bc, A->index, B->index, C->index); \
/*enter fragment shader*/ \
if(program->fragmentshader(uniforms, &ssr_frag_in, &color)) { \
@@ -177,6 +166,7 @@ void ssrR_triangle( Vec4* CA, Vec4* CB, Vec4* CC, Vert* A, Vert* B, Vert* C, Pro
if(write_depth) { \
ssr_writedepth(p.x, p.y, depth); \
} \
+ color32_saturate(&color); \
ssr_putpoint32(p.x, p.y, &color); \
} \
} \