ui/console: Precautionary glBindTexture and surface->texture validation in surface_gl_update_texture
In a GVT-g setup with dmabuf and GTK GUI, the current 2D texture at surface_gl_update_texture is not necessarily surface->texture. Adding a glBindTexture fixes related crashes and artifacts, and is generally more secure. Signed-off-by: HOU Qiming <hqm03ster@gmail.com> Tested-by: Marcel Apfelbaum<marcel.apfelbaum@gmail.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Message-id: 20190507080501.26712-1-marcel.apfelbaum@gmail.com [fixed malformed patch, rebase to master] Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
962cf8fd4f
commit
bfafa473ed
@ -92,13 +92,17 @@ void surface_gl_update_texture(QemuGLShader *gls,
|
||||
|
||||
assert(gls);
|
||||
|
||||
glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT,
|
||||
surface_stride(surface) / surface_bytes_per_pixel(surface));
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0,
|
||||
x, y, w, h,
|
||||
surface->glformat, surface->gltype,
|
||||
data + surface_stride(surface) * y
|
||||
+ surface_bytes_per_pixel(surface) * x);
|
||||
if (surface->texture) {
|
||||
glBindTexture(GL_TEXTURE_2D, surface->texture);
|
||||
glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT,
|
||||
surface_stride(surface)
|
||||
/ surface_bytes_per_pixel(surface));
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0,
|
||||
x, y, w, h,
|
||||
surface->glformat, surface->gltype,
|
||||
data + surface_stride(surface) * y
|
||||
+ surface_bytes_per_pixel(surface) * x);
|
||||
}
|
||||
}
|
||||
|
||||
void surface_gl_render_texture(QemuGLShader *gls,
|
||||
|
Loading…
Reference in New Issue
Block a user