forked from AuroraMiddleware/gtk
gsk: Avoid downloading GL textures when possible
I found that the gears demo was spending 40% cpu downloading a GL texture every frame, only to upload it again to another context. While the GSK rendering and the GtkGLArea use different GL contexts, they are (usually) connected by sharing data with the same global context, so we can just use the texture without the download/upload dance. This brings gears down to < 10% cpu.
This commit is contained in:
parent
92e551f895
commit
9ca9f42452
@ -521,8 +521,15 @@ gsk_gl_driver_get_texture_for_texture (GskGLDriver *self,
|
|||||||
if (GDK_IS_GL_TEXTURE (texture))
|
if (GDK_IS_GL_TEXTURE (texture))
|
||||||
{
|
{
|
||||||
GdkGLContext *texture_context = gdk_gl_texture_get_context ((GdkGLTexture *)texture);
|
GdkGLContext *texture_context = gdk_gl_texture_get_context ((GdkGLTexture *)texture);
|
||||||
|
GdkGLContext *shared_context = gdk_gl_context_get_shared_context (self->gl_context);
|
||||||
|
|
||||||
if (texture_context != self->gl_context)
|
if (texture_context == self->gl_context ||
|
||||||
|
(gdk_gl_context_get_shared_context (texture_context) == shared_context && shared_context != NULL))
|
||||||
|
{
|
||||||
|
/* A GL texture from the same GL context is a simple task... */
|
||||||
|
return gdk_gl_texture_get_id ((GdkGLTexture *)texture);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
|
|
||||||
@ -539,11 +546,6 @@ gsk_gl_driver_get_texture_for_texture (GskGLDriver *self,
|
|||||||
|
|
||||||
source_texture = downloaded_texture;
|
source_texture = downloaded_texture;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
/* A GL texture from the same GL context is a simple task... */
|
|
||||||
return gdk_gl_texture_get_id ((GdkGLTexture *)texture);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user