@@ -253,29 +253,28 @@ void gsKit_remove_hsync_handler(int callback_id)
253253#endif
254254
255255#if F_gsKit_clear
256+ #define MIN (X , Y ) (((X) < (Y)) ? (X) : (Y))
256257void gsKit_clear (GSGLOBAL * gsGlobal , u64 color )
257258{
258259 u8 PrevZState ;
259260 u8 strips ;
260261 u8 remain ;
262+ u8 index ;
261263 u32 pos ;
264+ u8 slices = (gsGlobal -> Width + 63 )/ 64 ;
265+ u32 count = (slices * 2 ) + 1 ;
266+ u128 flat_content [count ];
262267
263268 PrevZState = gsGlobal -> Test -> ZTST ;
264269 gsKit_set_test (gsGlobal , GS_ZTEST_OFF );
265- strips = gsGlobal -> Width / 64 ;
266- remain = gsGlobal -> Width % 64 ;
267- pos = 0 ;
268270
269- strips ++ ;
270- while ( strips -- > 0 )
271+ flat_content [ 0 ] = ( u128 ) rgbaq_to_RGBAQ ( color ). rgbaq ;
272+ for ( index = 0 ; index < slices ; index ++ )
271273 {
272- gsKit_prim_sprite (gsGlobal , pos , 0 , pos + 64 , gsGlobal -> Height , 0 , color );
273- pos += 64 ;
274- }
275- if (remain > 0 )
276- {
277- gsKit_prim_sprite (gsGlobal , pos , 0 , remain + pos , gsGlobal -> Height , 0 , color );
274+ flat_content [index * 2 + 1 ] = vertex_to_XYZ2 (gsGlobal , index * 64 , 0 , 0 ).xyz2 ;
275+ flat_content [index * 2 + 2 ] = (u128 )vertex_to_XYZ2 (gsGlobal , MIN ((index + 1 ) * 64 , gsGlobal -> Width ) , gsGlobal -> Height , 0 ).xyz2 ;
278276 }
277+ gsKit_prim_list_sprite_flat (gsGlobal , count , flat_content );
279278
280279 gsGlobal -> Test -> ZTST = PrevZState ;
281280 gsKit_set_test (gsGlobal , 0 );
0 commit comments