diff options
author | Christian Hergert <chergert@redhat.com> | 2020-10-28 16:49:55 -0700 |
---|---|---|
committer | Christian Hergert <chergert@redhat.com> | 2020-10-29 08:26:27 -0700 |
commit | 524fbc35a762b5ebc89e204f3eb37f386d6de273 (patch) | |
tree | 7544372ea21e906d8c819f29cb69873c59e0ffe1 | |
parent | 90fde9c9395d65b182ac166f984335216176ef7d (diff) | |
download | gtk+-524fbc35a762b5ebc89e204f3eb37f386d6de273.tar.gz |
gl: remove unused texture_from_surface APIwip/chergert/gdk-remove-texture_from_surface
This is not used anywhere and only exists within the X11 backend. It
can be removed now.
-rw-r--r-- | gdk/gdkglcontextprivate.h | 4 | ||||
-rw-r--r-- | gdk/x11/gdkglcontext-x11.c | 254 |
2 files changed, 0 insertions, 258 deletions
diff --git a/gdk/gdkglcontextprivate.h b/gdk/gdkglcontextprivate.h index e785fbc63d..07310eebfa 100644 --- a/gdk/gdkglcontextprivate.h +++ b/gdk/gdkglcontextprivate.h @@ -49,10 +49,6 @@ struct _GdkGLContextClass GError **error); cairo_region_t * (* get_damage) (GdkGLContext *context); - - gboolean (* texture_from_surface) (GdkGLContext *context, - cairo_surface_t *surface, - cairo_region_t *region); }; typedef struct { diff --git a/gdk/x11/gdkglcontext-x11.c b/gdk/x11/gdkglcontext-x11.c index ec0bb2f454..a332773493 100644 --- a/gdk/x11/gdkglcontext-x11.c +++ b/gdk/x11/gdkglcontext-x11.c @@ -257,259 +257,6 @@ gdk_x11_gl_context_get_damage (GdkGLContext *context) return GDK_GL_CONTEXT_CLASS (gdk_x11_gl_context_parent_class)->get_damage (context); } -typedef struct { - Display *display; - GLXDrawable drawable; - gboolean y_inverted; -} GdkGLXPixmap; - -static void -glx_pixmap_destroy (void *data) -{ - GdkGLXPixmap *glx_pixmap = data; - - glXDestroyPixmap (glx_pixmap->display, glx_pixmap->drawable); - - g_slice_free (GdkGLXPixmap, glx_pixmap); -} - -static GdkGLXPixmap * -glx_pixmap_get (cairo_surface_t *surface, guint texture_target) -{ - Display *display = cairo_xlib_surface_get_display (surface); - Screen *screen = cairo_xlib_surface_get_screen (surface); - Visual *visual = cairo_xlib_surface_get_visual (surface); - GdkGLXPixmap *glx_pixmap; - GLXFBConfig *fbconfigs, config; - int nfbconfigs; - XVisualInfo *visinfo; - VisualID visualid; - int i, value; - gboolean y_inverted; - gboolean with_alpha; - guint target = 0; - guint format = 0; - int pixmap_attributes[] = { - GLX_TEXTURE_TARGET_EXT, 0, - GLX_TEXTURE_FORMAT_EXT, 0, - None - }; - - if (visual == NULL) - return NULL; - - with_alpha = cairo_surface_get_content (surface) == CAIRO_CONTENT_COLOR_ALPHA; - - y_inverted = FALSE; - fbconfigs = glXGetFBConfigs (display, XScreenNumberOfScreen (screen), &nfbconfigs); - for (i = 0; i < nfbconfigs; i++) - { - visinfo = glXGetVisualFromFBConfig (display, fbconfigs[i]); - if (!visinfo) - continue; - - visualid = visinfo->visualid; - XFree (visinfo); - - if (visualid != XVisualIDFromVisual (visual)) - continue; - - glXGetFBConfigAttrib (display, fbconfigs[i], GLX_DRAWABLE_TYPE, &value); - if (!(value & GLX_PIXMAP_BIT)) - continue; - - glXGetFBConfigAttrib (display, fbconfigs[i], - GLX_BIND_TO_TEXTURE_TARGETS_EXT, - &value); - if (texture_target == GL_TEXTURE_2D) - { - if (value & GLX_TEXTURE_2D_BIT_EXT) - target = GLX_TEXTURE_2D_EXT; - else - continue; - } - else if (texture_target == GL_TEXTURE_RECTANGLE_ARB) - { - if (value & GLX_TEXTURE_RECTANGLE_BIT_EXT) - target = GLX_TEXTURE_RECTANGLE_EXT; - else - continue; - } - else - continue; - - if (!with_alpha) - { - glXGetFBConfigAttrib (display, fbconfigs[i], - GLX_BIND_TO_TEXTURE_RGB_EXT, - &value); - if (!value) - continue; - - format = GLX_TEXTURE_FORMAT_RGB_EXT; - } - else - { - glXGetFBConfigAttrib (display, fbconfigs[i], - GLX_BIND_TO_TEXTURE_RGBA_EXT, - &value); - if (!value) - continue; - - format = GLX_TEXTURE_FORMAT_RGBA_EXT; - } - - glXGetFBConfigAttrib (display, fbconfigs[i], - GLX_Y_INVERTED_EXT, - &value); - if (value == TRUE) - y_inverted = TRUE; - - config = fbconfigs[i]; - break; - } - - XFree (fbconfigs); - - if (i == nfbconfigs) - return NULL; - - pixmap_attributes[1] = target; - pixmap_attributes[3] = format; - - glx_pixmap = g_slice_new0 (GdkGLXPixmap); - glx_pixmap->y_inverted = y_inverted; - glx_pixmap->display = display; - glx_pixmap->drawable = glXCreatePixmap (display, config, - cairo_xlib_surface_get_drawable (surface), - pixmap_attributes); - - return glx_pixmap; -} - -static gboolean -gdk_x11_gl_context_texture_from_surface (GdkGLContext *paint_context, - cairo_surface_t *cairo_surface, - cairo_region_t *region) -{ - GdkGLXPixmap *glx_pixmap; - double device_x_offset, device_y_offset; - cairo_rectangle_int_t rect; - int n_rects, i; - GdkSurface *surface; - int unscaled_surface_height; - int surface_scale; - unsigned int texture_id; - gboolean use_texture_rectangle; - guint target; - double sx, sy; - float uscale, vscale; - GdkTexturedQuad *quads; - GdkX11Display *display_x11; - - display_x11 = GDK_X11_DISPLAY (gdk_gl_context_get_display (paint_context)); - if (!display_x11->has_glx_texture_from_pixmap) - return FALSE; - - if (cairo_surface_get_type (cairo_surface) != CAIRO_SURFACE_TYPE_XLIB) - return FALSE; - - use_texture_rectangle = gdk_gl_context_use_texture_rectangle (paint_context); - if (use_texture_rectangle) - target = GL_TEXTURE_RECTANGLE_ARB; - else - target = GL_TEXTURE_2D; - - glx_pixmap = glx_pixmap_get (cairo_surface, target); - if (glx_pixmap == NULL) - return FALSE; - - GDK_DISPLAY_NOTE (GDK_DISPLAY (display_x11), OPENGL, g_message ("Using GLX_EXT_texture_from_pixmap to draw surface")); - - surface = gdk_gl_context_get_surface (paint_context); - surface_scale = gdk_surface_get_scale_factor (surface); - gdk_surface_get_unscaled_size (surface, NULL, &unscaled_surface_height); - - sx = sy = 1; - cairo_surface_get_device_scale (cairo_surface, &sx, &sy); - cairo_surface_get_device_offset (cairo_surface, &device_x_offset, &device_y_offset); - - /* Ensure all the X stuff are synced before we read it back via texture-from-pixmap */ - glXWaitX(); - - glGenTextures (1, &texture_id); - glBindTexture (target, texture_id); - - glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri (target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri (target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - glXBindTexImageEXT (glx_pixmap->display, glx_pixmap->drawable, - GLX_FRONT_LEFT_EXT, NULL); - - glEnable (GL_SCISSOR_TEST); - - n_rects = cairo_region_num_rectangles (region); - quads = g_new (GdkTexturedQuad, n_rects); - -#define FLIP_Y(_y) (unscaled_surface_height - (_y)) - - cairo_region_get_extents (region, &rect); - glScissor (rect.x * surface_scale, FLIP_Y((rect.y + rect.height) * surface_scale), - rect.width * surface_scale, rect.height * surface_scale); - - for (i = 0; i < n_rects; i++) - { - int src_x, src_y, src_height, src_width; - - cairo_region_get_rectangle (region, i, &rect); - - src_x = rect.x * sx + device_x_offset; - src_y = rect.y * sy + device_y_offset; - src_width = rect.width * sx; - src_height = rect.height * sy; - - if (use_texture_rectangle) - { - uscale = 1.0; - vscale = 1.0; - } - else - { - uscale = 1.0 / cairo_xlib_surface_get_width (cairo_surface); - vscale = 1.0 / cairo_xlib_surface_get_height (cairo_surface); - } - - { - GdkTexturedQuad quad = { - rect.x * surface_scale, FLIP_Y(rect.y * surface_scale), - (rect.x + rect.width) * surface_scale, FLIP_Y((rect.y + rect.height) * surface_scale), - uscale * src_x, vscale * src_y, - uscale * (src_x + src_width), vscale * (src_y + src_height), - }; - - quads[i] = quad; - } - } - -#undef FLIP_Y - - gdk_gl_texture_quads (paint_context, target, n_rects, quads, FALSE); - g_free (quads); - - glDisable (GL_SCISSOR_TEST); - - glXReleaseTexImageEXT (glx_pixmap->display, glx_pixmap->drawable, - GLX_FRONT_LEFT_EXT); - - glDeleteTextures (1, &texture_id); - - glx_pixmap_destroy(glx_pixmap); - - return TRUE; -} - static XVisualInfo * find_xvisinfo_for_fbconfig (GdkDisplay *display, GLXFBConfig config) @@ -972,7 +719,6 @@ gdk_x11_gl_context_class_init (GdkX11GLContextClass *klass) context_class->realize = gdk_x11_gl_context_realize; context_class->get_damage = gdk_x11_gl_context_get_damage; - context_class->texture_from_surface = gdk_x11_gl_context_texture_from_surface; draw_context_class->end_frame = gdk_x11_gl_context_end_frame; |