Skip to content

Commit

Permalink
ui/egl-helpers: Augment parameter list of egl_texture_blend() to conv…
Browse files Browse the repository at this point in the history
…ey 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>
  • Loading branch information
zhangchn authored and kraxel committed Feb 5, 2019
1 parent 5e24600 commit 051a0cd
Show file tree
Hide file tree
Showing 5 changed files with 11 additions and 8 deletions.
2 changes: 1 addition & 1 deletion include/ui/egl-helpers.h
Expand Up @@ -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

Expand Down
3 changes: 2 additions & 1 deletion ui/egl-headless.c
Expand Up @@ -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);
Expand Down
9 changes: 5 additions & 4 deletions ui/egl-helpers.c
Expand Up @@ -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);
Expand Down
3 changes: 2 additions & 1 deletion ui/gtk-egl.c
Expand Up @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion ui/spice-display.c
Expand Up @@ -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();
}

Expand Down

0 comments on commit 051a0cd

Please sign in to comment.