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