From 0d014a542a28ce57b7a8ea9056258ca017f158d1 Mon Sep 17 00:00:00 2001 From: SlyVTT Date: Sun, 7 May 2023 16:08:29 +0200 Subject: [PATCH] added a working line shader --- azur/src/gint/shaders/line.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/azur/src/gint/shaders/line.c b/azur/src/gint/shaders/line.c index 788086b..e468e97 100644 --- a/azur/src/gint/shaders/line.c +++ b/azur/src/gint/shaders/line.c @@ -44,7 +44,7 @@ int ABS( int x1 ) int SGN( int x1 ) { if (x1 > 0) return 1; - else if (x1 = 0) return 0; + else if (x1 == 0) return 0; else return -1; } @@ -90,7 +90,7 @@ void azrp_line(int xA, int yA, int xB, int yB, int color) cmd.dy = ABS(y2-y1); cmd.sy = SGN(y2-y1); - cmd.i = 1; + cmd.i = 0; cmd.cumul = (cmd.dx >= cmd.dy) ? cmd.dx >> 1 : cmd.dy >> 1; azrp_queue_command(&cmd, sizeof cmd, frag_first, frag_count); @@ -108,15 +108,27 @@ void azrp_shader_line( void *uniforms, void *comnd, void *fragment ) if (cmd->dy == 0) { - for( i = cmd->i; i < cmd->dx-1 ; i++ ) + for( i = cmd->i; i < cmd->dx ; i++ ) { cmd->curr_x += cmd->sx; frag[ azrp_width * cmd->curr_y + cmd->curr_x ] = cmd->color; } } + else if (cmd->dx == 0) + { + for( i = cmd->i; i < cmd->dy ; i++ ) + { + cmd->curr_y += cmd->sy; + + // if curr_y=16, this means we are changing to next fragment + if (cmd->curr_y == azrp_frag_height) break; + + frag[ azrp_width * cmd->curr_y + cmd->curr_x ] = cmd->color; + } + } else if (cmd->dx >= cmd->dy) { - for( i = cmd->i; i < cmd->dx-1; i++ ) + for( i = cmd->i; i < cmd->dx; i++ ) { cmd->curr_x += cmd->sx; cmd->cumul += cmd->dy; @@ -133,7 +145,7 @@ void azrp_shader_line( void *uniforms, void *comnd, void *fragment ) } else { - for( i = cmd->i; i < cmd->dy-1; i++ ) + for( i = cmd->i; i < cmd->dy; i++ ) { cmd->curr_y += cmd->sy; cmd->cumul += cmd->dx; @@ -150,7 +162,7 @@ void azrp_shader_line( void *uniforms, void *comnd, void *fragment ) } } - cmd->curr_y &= 15; + cmd->curr_y = cmd->curr_y & 15; - cmd->i = i; + cmd->i = i+1; } \ No newline at end of file