ui/egl-helpers: Augment parameter list of egl_texture_blend() to convey scales of viewport
This would help gtk-egl display showing scaled DMABuf cursor images when gtk window was zoomed. A default scale of (1.0, 1.0) was presumed for call sites where no scaling is needed. Signed-off-by: Chen Zhang <tgfbeta@me.com> Message-id: 23B229B3-3095-4DFB-8369-866784808D30@me.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									5e24600a7c
								
							
						
					
					
						commit
						051a0cde7b
					
				| @ -27,7 +27,7 @@ void egl_fb_read(void *dst, egl_fb *src); | ||||
| 
 | ||||
| void egl_texture_blit(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip); | ||||
| void egl_texture_blend(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip, | ||||
|                        int x, int y); | ||||
|                        int x, int y, double scale_x, double scale_y); | ||||
| 
 | ||||
| #ifdef CONFIG_OPENGL_DMABUF | ||||
| 
 | ||||
|  | ||||
| @ -142,7 +142,8 @@ static void egl_scanout_flush(DisplayChangeListener *dcl, | ||||
|         egl_texture_blit(edpy->gls, &edpy->blit_fb, &edpy->guest_fb, | ||||
|                          !edpy->y_0_top); | ||||
|         egl_texture_blend(edpy->gls, &edpy->blit_fb, &edpy->cursor_fb, | ||||
|                           !edpy->y_0_top, edpy->pos_x, edpy->pos_y); | ||||
|                           !edpy->y_0_top, edpy->pos_x, edpy->pos_y, | ||||
|                           1.0, 1.0); | ||||
|     } else { | ||||
|         /* no cursor -> use simple framebuffer blit */ | ||||
|         egl_fb_blit(&edpy->blit_fb, &edpy->guest_fb, edpy->y_0_top); | ||||
|  | ||||
| @ -120,14 +120,15 @@ void egl_texture_blit(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip) | ||||
| } | ||||
| 
 | ||||
| void egl_texture_blend(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip, | ||||
|                        int x, int y) | ||||
|                        int x, int y, double scale_x, double scale_y) | ||||
| { | ||||
|     glBindFramebuffer(GL_FRAMEBUFFER_EXT, dst->framebuffer); | ||||
|     int w = scale_x * src->width; | ||||
|     int h = scale_y * src->height; | ||||
|     if (flip) { | ||||
|         glViewport(x, y, src->width, src->height); | ||||
|         glViewport(x, y, w, h); | ||||
|     } else { | ||||
|         glViewport(x, dst->height - src->height - y, | ||||
|                    src->width, src->height); | ||||
|         glViewport(x, dst->height - h - y, w, h); | ||||
|     } | ||||
|     glEnable(GL_TEXTURE_2D); | ||||
|     glBindTexture(GL_TEXTURE_2D, src->texture); | ||||
|  | ||||
| @ -278,7 +278,8 @@ void gd_egl_scanout_flush(DisplayChangeListener *dcl, | ||||
|                          vc->gfx.y0_top); | ||||
|         egl_texture_blend(vc->gfx.gls, &vc->gfx.win_fb, &vc->gfx.cursor_fb, | ||||
|                           vc->gfx.y0_top, | ||||
|                           vc->gfx.cursor_x, vc->gfx.cursor_y); | ||||
|                           vc->gfx.cursor_x, vc->gfx.cursor_y, | ||||
|                           vc->gfx.scale_x, vc->gfx.scale_y); | ||||
|     } else { | ||||
|         egl_fb_blit(&vc->gfx.win_fb, &vc->gfx.guest_fb, !vc->gfx.y0_top); | ||||
|     } | ||||
|  | ||||
| @ -1090,7 +1090,7 @@ static void qemu_spice_gl_update(DisplayChangeListener *dcl, | ||||
|         egl_texture_blit(ssd->gls, &ssd->blit_fb, &ssd->guest_fb, | ||||
|                          !y_0_top); | ||||
|         egl_texture_blend(ssd->gls, &ssd->blit_fb, &ssd->cursor_fb, | ||||
|                           !y_0_top, x, y); | ||||
|                           !y_0_top, x, y, 1.0, 1.0); | ||||
|         glFlush(); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Chen Zhang
						Chen Zhang