@@ -387,58 +387,8 @@ void VirtioGPUDriver::flush() {
387387 return ;
388388}
389389
390- int VirtioGPUDriver::try_merge (gpu_rect* a, gpu_rect* b) {
391- uint32_t ax2 = a->point .x + a->size .width ;
392- uint32_t ay2 = a->point .y + a->size .height ;
393- uint32_t bx2 = b->point .x + b->size .width ;
394- uint32_t by2 = b->point .y + b->size .height ;
395-
396- if (a->point .x > bx2 || b->point .x > ax2 || a->point .y > by2 || b->point .y > ay2)
397- return 0 ;
398-
399- uint32_t min_x = a->point .x < b->point .x ? a->point .x : b->point .x ;
400- uint32_t min_y = a->point .y < b->point .y ? a->point .y : b->point .y ;
401- uint32_t max_x = ax2 > bx2 ? ax2 : bx2;
402- uint32_t max_y = ay2 > by2 ? ay2 : by2;
403-
404- a->point .x = min_x;
405- a->point .y = min_y;
406- a->size .width = max_x - min_x;
407- a->size .height = max_y - min_y;
408-
409- return 1 ;
410- }
411-
412- void VirtioGPUDriver::mark_dirty (uint32_t x, uint32_t y, uint32_t w, uint32_t h) {
413- if (x >= screen_size.width || y >= screen_size.height )
414- return ;
415-
416- if (x + w > screen_size.width )
417- w = screen_size.width - x;
418-
419- if (y + h > screen_size.height )
420- h = screen_size.height - y;
421-
422- if (w == 0 || h == 0 )
423- return ;
424-
425- gpu_rect new_rect = { x, y, w, h };
426-
427- for (uint32_t i = 0 ; i < dirty_count; i++) {
428- if (try_merge (&dirty_rects[i], &new_rect))
429- return ;
430- }
431-
432- if (dirty_count < MAX_DIRTY_RECTS_VGP)
433- dirty_rects[dirty_count++] = new_rect;
434- else
435- full_redraw = true ;
436- }
437-
438-
439390void VirtioGPUDriver::clear (uint32_t color) {
440- fb_clear ((uint32_t *)framebuffer, screen_size.width , screen_size.height , color);
441- mark_dirty (0 ,0 ,screen_size.width ,screen_size.height );
391+ fb_clear ((uint32_t *)framebuffer, color);
442392}
443393
444394void VirtioGPUDriver::draw_pixel (uint32_t x, uint32_t y, color color){
@@ -448,22 +398,18 @@ void VirtioGPUDriver::draw_pixel(uint32_t x, uint32_t y, color color){
448398
449399void VirtioGPUDriver::fill_rect (uint32_t x, uint32_t y, uint32_t width, uint32_t height, color color){
450400 fb_fill_rect ((uint32_t *)framebuffer, x, y, width, height, color);
451- mark_dirty (x,y,width,height);
452401}
453402
454403void VirtioGPUDriver::draw_line (uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, color color){
455- gpu_rect rect = fb_draw_line ((uint32_t *)framebuffer, x0, y0, x1, y1, color);
456- mark_dirty (rect.point .x ,rect.point .y ,rect.size .width ,rect.size .height );
404+ fb_draw_line ((uint32_t *)framebuffer, x0, y0, x1, y1, color);
457405}
458406
459407void VirtioGPUDriver::draw_char (uint32_t x, uint32_t y, char c, uint32_t scale, uint32_t color){
460408 fb_draw_char ((uint32_t *)framebuffer, x, y, c, scale, color);
461- mark_dirty (x,y,8 *scale,8 *scale);
462409}
463410
464411void VirtioGPUDriver::draw_string (string s, uint32_t x, uint32_t y, uint32_t scale, uint32_t color){
465- gpu_size drawn_string = fb_draw_string ((uint32_t *)framebuffer, s, x, y, scale, color);
466- mark_dirty (x,y,drawn_string.width ,drawn_string.height );
412+ fb_draw_string ((uint32_t *)framebuffer, s, x, y, scale, color);
467413}
468414
469415uint32_t VirtioGPUDriver::get_char_size (uint32_t scale){
0 commit comments