egl-helpers: add egl_texture_blit and egl_texture_blend
egl_texture_blit() blits a texture, simliar to egl_fb_blit() but by rendering the texture to the screen instead of using a framebuffer blit. egl_texture_blend() renders a texture with alpha blending, will be used to render the cursor to the screen. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 20171010135453.6704-6-kraxel@redhat.com
This commit is contained in:
parent
86c0522c63
commit
0eb50c2737
|
@ -24,6 +24,10 @@ void egl_fb_setup_new_tex(egl_fb *fb, int width, int height);
|
||||||
void egl_fb_blit(egl_fb *dst, egl_fb *src, bool flip);
|
void egl_fb_blit(egl_fb *dst, egl_fb *src, bool flip);
|
||||||
void egl_fb_read(void *dst, egl_fb *src);
|
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);
|
||||||
|
|
||||||
#ifdef CONFIG_OPENGL_DMABUF
|
#ifdef CONFIG_OPENGL_DMABUF
|
||||||
|
|
||||||
extern int qemu_egl_rn_fd;
|
extern int qemu_egl_rn_fd;
|
||||||
|
|
|
@ -111,6 +111,33 @@ void egl_fb_read(void *dst, egl_fb *src)
|
||||||
GL_BGRA, GL_UNSIGNED_BYTE, dst);
|
GL_BGRA, GL_UNSIGNED_BYTE, dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void egl_texture_blit(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip)
|
||||||
|
{
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER_EXT, dst->framebuffer);
|
||||||
|
glViewport(0, 0, dst->width, dst->height);
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, src->texture);
|
||||||
|
qemu_gl_run_texture_blit(gls, flip);
|
||||||
|
}
|
||||||
|
|
||||||
|
void egl_texture_blend(QemuGLShader *gls, egl_fb *dst, egl_fb *src, bool flip,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER_EXT, dst->framebuffer);
|
||||||
|
if (flip) {
|
||||||
|
glViewport(x, y, src->width, src->height);
|
||||||
|
} else {
|
||||||
|
glViewport(x, dst->height - src->height - y,
|
||||||
|
src->width, src->height);
|
||||||
|
}
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, src->texture);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
qemu_gl_run_texture_blit(gls, flip);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
#ifdef CONFIG_OPENGL_DMABUF
|
#ifdef CONFIG_OPENGL_DMABUF
|
||||||
|
|
Loading…
Reference in a new issue