[gtk/wip/chergert/gdk-remove-texture_from_surface: 64/64] gl: remove unused texture_from_surface API
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/gdk-remove-texture_from_surface: 64/64] gl: remove unused texture_from_surface API
- Date: Thu, 29 Oct 2020 15:28:15 +0000 (UTC)
commit 524fbc35a762b5ebc89e204f3eb37f386d6de273
Author: Christian Hergert <chergert redhat com>
Date: Wed Oct 28 16:49:55 2020 -0700
gl: remove unused texture_from_surface API
This is not used anywhere and only exists within the X11 backend. It
can be removed now.
gdk/gdkglcontextprivate.h | 4 -
gdk/x11/gdkglcontext-x11.c | 254 ---------------------------------------------
2 files changed, 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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]