Compare commits

...

1 Commits

Author SHA1 Message Date
Matthias Clasen
24f8f64154 Flip glarea back
Textures that are backed by an fbo need to be read
out upside down. OpenGL, you are amazing.
2020-09-27 23:12:02 -04:00
4 changed files with 31 additions and 4 deletions

View File

@@ -30,6 +30,7 @@ struct _GdkGLTexture {
GdkGLContext *context;
guint id;
gboolean is_fbo;
cairo_surface_t *saved;
@@ -196,6 +197,7 @@ gdk_gl_texture_release (GdkGLTexture *self)
GdkTexture *
gdk_gl_texture_new (GdkGLContext *context,
guint id,
gboolean is_fbo,
int width,
int height,
GDestroyNotify destroy,
@@ -215,9 +217,15 @@ gdk_gl_texture_new (GdkGLContext *context,
self->context = g_object_ref (context);
self->id = id;
self->is_fbo = is_fbo;
self->destroy = destroy;
self->data = data;
return GDK_TEXTURE (self);
}
gboolean
gdk_gl_texture_is_fbo (GdkGLTexture *texture)
{
return texture->is_fbo;
}

View File

@@ -44,6 +44,7 @@ GType gdk_gl_texture_get_type (void) G_GNUC_CON
GDK_AVAILABLE_IN_ALL
GdkTexture * gdk_gl_texture_new (GdkGLContext *context,
guint id,
gboolean is_fbo,
int width,
int height,
GDestroyNotify destroy,
@@ -52,6 +53,8 @@ GdkTexture * gdk_gl_texture_new (GdkGLContext
GDK_AVAILABLE_IN_ALL
void gdk_gl_texture_release (GdkGLTexture *self);
GDK_AVAILABLE_IN_ALL
gboolean gdk_gl_texture_is_fbo (GdkGLTexture *self);
G_END_DECLS

View File

@@ -943,10 +943,21 @@ upload_texture (GskGLRenderer *self,
GL_LINEAR,
GL_LINEAR);
out_region->x = 0;
out_region->y = 0;
out_region->x2 = 1;
out_region->y2 = 1;
if (GDK_IS_GL_TEXTURE (texture) &&
gdk_gl_texture_is_fbo (GDK_GL_TEXTURE (texture)))
{
out_region->x = 0;
out_region->y = 1;
out_region->x2 = 1;
out_region->y2 = 0;
}
else
{
out_region->x = 0;
out_region->y = 0;
out_region->x2 = 1;
out_region->y2 = 1;
}
}
}
@@ -4032,6 +4043,7 @@ gsk_gl_renderer_render_texture (GskRenderer *renderer,
texture = gdk_gl_texture_new (self->gl_context,
texture_id,
TRUE,
width, height,
NULL, NULL);

View File

@@ -740,10 +740,14 @@ gtk_gl_area_snapshot (GtkWidget *widget,
texture->holder = gdk_gl_texture_new (priv->context,
texture->id,
TRUE,
texture->width,
texture->height,
release_texture, texture);
/* Our texture is backed by an FBO, and those are drawn upside-down,
* compared to screen buffer. Yay, OpenGL
*/
gtk_snapshot_append_texture (snapshot,
texture->holder,
&GRAPHENE_RECT_INIT (0, 0,