summaryrefslogtreecommitdiff
path: root/src/core/rasterizer.c
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-07-18 03:43:19 +0800
committerchai <chaifix@163.com>2020-07-18 03:43:19 +0800
commit4deff343b5fd928ae9475eedcf9b6add34b31ae2 (patch)
treed9108f5fedc9f0dd57bf964763edc508983c80c5 /src/core/rasterizer.c
parent4984946caf0397a13da7605bc1ee406ea7354628 (diff)
-uniform collection
Diffstat (limited to 'src/core/rasterizer.c')
-rw-r--r--src/core/rasterizer.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/core/rasterizer.c b/src/core/rasterizer.c
index c5745ba..55d4ad3 100644
--- a/src/core/rasterizer.c
+++ b/src/core/rasterizer.c
@@ -82,11 +82,12 @@ static void puttriangle(Vec2* A, Vec2* B, Vec2* C, Color c) {
ssrR_putline(C->x, C->y, B->x, B->y, c);
}
+extern UniformCollection* g_uniforms ;
+
void ssrR_triangle(
Vec4* CA, Vec4* CB, Vec4* CC,
uint IA, uint IB, uint IC,
Program* program,
- UniformCollection* uniforms,
bool early_culled
) {
ssr_assert(CA && CB && CC && program);
@@ -104,6 +105,8 @@ void ssrR_triangle(
}
}
+ UniformCollection* uniforms = g_uniforms;
+
Vec4 SA, SB, SC;
internal_vec4_dividewnoz(CA, &SA); ssrU_viewport(&SA, &SA);
internal_vec4_dividewnoz(CB, &SB); ssrU_viewport(&SB, &SB);
@@ -186,7 +189,7 @@ void ssrR_triangle(
/*interpolate varying variables*/ \
ssrS_solveregsbcp(&bc, IA, IB, IC); \
/*enter fragment shader*/ \
- discard = !frag_shader(uniforms, out_color[0]); \
+ discard = !frag_shader(out_color[0]); \
discardif(discard); \
/*put point*/ \
ssr_blendandputpoint(p.x, p.y, blend); \
@@ -242,10 +245,9 @@ void ssrR_triangle(
void ssrR_line(
Vec4* CA, Vec4* CB,
uint IA, uint IB,
- Program* program,
- UniformCollection* uniforms
+ Program* program
) {
- ssr_assert(CA && CB && program && uniforms);
+ ssr_assert(CA && CB && program);
Vec4 SA, SB;
internal_vec4_dividewnoz(CA, &SA); ssrU_viewport(&SA, &SA);
@@ -253,6 +255,8 @@ void ssrR_line(
FragmentShader frag_shader = program->fragmentshader;
+ UniformCollection* uniforms = g_uniforms;
+
int x0 = SA.x, y0 = SA.y;
int x1 = SB.x, y1 = SB.y;
float wA = SA.w, wB = SB.w;
@@ -318,7 +322,7 @@ void ssrR_line(
discardif(!pass_depth_test || !pass_stencil_test);
/*solve registers with lerp*/
ssrS_solveregslerp(t, IA, IB);
- discard = !frag_shader(uniforms, out_color[0]);
+ discard = !frag_shader(out_color[0]);
discardif(discard);
/*put point*/
ssr_blendandputpoint(px, py, blend);
@@ -333,11 +337,13 @@ void ssrR_line(
#undef discardif
}
-void ssrR_point(Vec4* CA, uint IA, Program* program, UniformCollection* uniforms) {
- ssr_assert(CA && program && uniforms);
+void ssrR_point(Vec4* CA, uint IA, Program* program) {
+ ssr_assert(CA && program);
FragmentShader frag_shader = program->fragmentshader;
+ UniformCollection* uniforms = g_uniforms;
+
Vec3 SA;
internal_vec4_dividew(CA, &SA); ssrU_viewport(&SA, &SA);
@@ -364,7 +370,7 @@ void ssrR_point(Vec4* CA, uint IA, Program* program, UniformCollection* uniforms
}
discardif(!pass_depth_test || !pass_stencil_test);
ssrS_solveregscopy(IA);
- discard = !frag_shader(uniforms, out_color[0]);
+ discard = !frag_shader(out_color[0]);
discardif(discard);
/*put point*/
ssr_blendandputpoint(px, py, blend);