/** * gdk_gl_config_is_stereo: * @glconfig: a #GdkGLConfig. * * Returns whether the configuration supports the stereo visual. * * Return value: TRUE if the stereo visual is supported, FALSE otherwise. **/ gboolean gdk_gl_config_is_stereo (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), FALSE); return glconfig->is_stereo; }
/** * gdk_gl_config_has_accum_buffer: * @glconfig: a #GdkGLConfig. * * Returns whether the configured frame buffer has accumulation buffer. * * Return value: TRUE if the frame buffer has accumulation buffer, FALSE * otherwise. **/ gboolean gdk_gl_config_has_accum_buffer (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), FALSE); return glconfig->has_accum_buffer; }
/** * gdk_gl_config_get_n_sample_buffers: * @glconfig: a #GdkGLConfig. * * Gets the number of multisample buffers. * * Return value: number of multisample buffers. **/ gint gdk_gl_config_get_n_sample_buffers (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), 0); return glconfig->n_sample_buffers; }
/** * gdk_gl_config_is_double_buffered: * @glconfig: a #GdkGLConfig. * * Returns whether the configuration supports the double-buffered visual. * * Return value: TRUE if the double-buffered visual is supported, FALSE * otherwise. **/ gboolean gdk_gl_config_is_double_buffered (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), FALSE); return (glconfig->is_double_buffered && (!glconfig->as_single_mode)); }
/** * gdk_gl_config_get_layer_plane: * @glconfig: a #GdkGLConfig. * * Gets the layer plane (level) of the frame buffer. * Zero is the default frame buffer. * Positive layer planes correspond to frame buffers that overlay the default * buffer, and negative layer planes correspond to frame buffers that underlie * the default frame buffer. * * Return value: layer plane. **/ gint gdk_gl_config_get_layer_plane (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), 0); return glconfig->layer_plane; }
/** * gdk_gl_window_new: * @glconfig: a #GdkGLConfig. * @window: the #GdkWindow to be used as the rendering area. * @attrib_list: (array) (allow-none): this must be set to NULL or empty (first attribute of None). * * Creates an on-screen rendering area. * attrib_list is currently unused. This must be set to NULL or empty * (first attribute of None). See GLX 1.3 spec. * * Return value: the new #GdkGLWindow. **/ GdkGLWindow * gdk_gl_window_new (GdkGLConfig *glconfig, GdkWindow *window, const int *attrib_list) { GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), NULL); g_return_val_if_fail (GDK_IS_WINDOW (window), NULL); /* * Get X Window. */ Window glxwindow = GDK_DRAWABLE_XID (GDK_DRAWABLE (window)); /* * Instantiate the GdkGLWindowImplX11 object. */ GdkGLWindow *glwindow = g_object_new (GDK_TYPE_GL_WINDOW, NULL); glwindow->drawable = GDK_DRAWABLE (window); g_object_add_weak_pointer (G_OBJECT (glwindow->drawable), (gpointer *) &(glwindow->drawable)); glwindow->glxwindow = glxwindow; glwindow->glconfig = glconfig; g_object_ref (G_OBJECT (glwindow->glconfig)); glwindow->is_destroyed = FALSE; return glwindow; }
/** * gdk_x11_gl_query_glx_extension: * @glconfig: a #GdkGLConfig. * @extension: name of GLX extension. * * Determines whether a given GLX extension is supported. * * Return value: TRUE if the GLX extension is supported, FALSE if not * supported. **/ gboolean gdk_x11_gl_query_glx_extension (GdkGLConfig *glconfig, const char *extension) { static const char *extensions = NULL; const char *start; char *where, *terminator; int major, minor; g_return_val_if_fail (GDK_IS_GL_CONFIG(glconfig), FALSE); /* Extension names should not have spaces. */ where = strchr (extension, ' '); if (where || *extension == '\0') return FALSE; if (extensions == NULL) { /* Be careful not to call glXQueryExtensionsString if it looks like the server doesn't support GLX 1.1. Unfortunately, the original GLX 1.0 didn't have the notion of GLX extensions. */ glXQueryVersion (GDK_GL_CONFIG_XDISPLAY (glconfig), &major, &minor); if ((major == 1 && minor < 1) || (major < 1)) return FALSE; int screen_num = GDK_GL_CONFIG(glconfig)->screen_num; extensions = glXQueryExtensionsString (GDK_GL_CONFIG_XDISPLAY (glconfig), screen_num); } /* It takes a bit of care to be fool-proof about parsing the GLX extensions string. Don't be fooled by sub-strings, etc. */ start = extensions; for (;;) { where = strstr (start, extension); if (where == NULL) break; terminator = where + strlen (extension); if (where == start || *(where - 1) == ' ') if (*terminator == ' ' || *terminator == '\0') { GDK_GL_NOTE (MISC, g_message (" - %s - supported", extension)); return TRUE; } start = terminator; } GDK_GL_NOTE (MISC, g_message (" - %s - not supported", extension)); return FALSE; }
/** * gdk_gl_window_new: * @glconfig: a #GdkGLConfig. * @window: the #GdkWindow to be used as the rendering area. * @attrib_list: this must be set to NULL or empty (first attribute of None). * * Creates an on-screen rendering area. * attrib_list is currently unused. This must be set to NULL or empty * (first attribute of None). See GLX 1.3 spec. * * Return value: the new #GdkGLWindow. **/ GdkGLWindow * gdk_gl_window_new (GdkGLConfig *glconfig, GdkWindow *window, const int *attrib_list) { g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), NULL); return GDK_GL_CONFIG_IMPL_GET_CLASS (glconfig->impl)->create_gl_window (glconfig, window, attrib_list); }
/** * gdk_window_set_gl_capability: * @window: the #GdkWindow to be used as the rendering area. * @glconfig: a #GdkGLConfig. * @attrib_list: this must be set to NULL or empty (first attribute of None). * * Set the OpenGL-capability to the @window. * This function creates a new #GdkGLWindow held by the @window. * attrib_list is currently unused. This must be set to NULL or empty * (first attribute of None). * * Return value: the #GdkGLWindow used by the @window if it is successful, * NULL otherwise. **/ GdkGLWindow * gdk_window_set_gl_capability (GdkWindow *window, GdkGLConfig *glconfig, const int *attrib_list) { GdkGLWindow *glwindow; GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_WINDOW (window), NULL); g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), NULL); if (quark_gl_window == 0) quark_gl_window = g_quark_from_static_string (quark_gl_window_string); /* If already set */ glwindow = g_object_get_qdata (G_OBJECT (window), quark_gl_window); if (glwindow != NULL) return glwindow; /* * Create GdkGLWindow */ glwindow = gdk_gl_window_new (glconfig, window, attrib_list); if (glwindow == NULL) { g_warning ("cannot create GdkGLWindow\n"); return NULL; } g_object_set_qdata_full (G_OBJECT (window), quark_gl_window, glwindow, (GDestroyNotify) g_object_unref); /* * Set a background of "None" on window to avoid AIX X server crash */ GDK_GL_NOTE (MISC, g_message (" - window->bg_pixmap = %p", (void*)gdk_window_get_background_pattern (window))); gdk_window_set_background_pattern (window, NULL); GDK_GL_NOTE (MISC, g_message (" - window->bg_pixmap = %p", (void*)gdk_window_get_background_pattern (window))); return glwindow; }
/** * gdk_pixmap_set_gl_capability: * @pixmap: the #GdkPixmap to be used as the rendering area. * @glconfig: a #GdkGLConfig. * @attrib_list: this must be set to NULL or empty (first attribute of None). * * Set the OpenGL-capability to the @pixmap. * This function creates a new #GdkGLPixmap held by the @pixmap. * attrib_list is currently unused. This must be set to NULL or empty * (first attribute of None). * * Return value: the #GdkGLPixmap used by the @pixmap if it is successful, * NULL otherwise. **/ GdkGLPixmap * gdk_pixmap_set_gl_capability (GdkPixmap *pixmap, GdkGLConfig *glconfig, const int *attrib_list) { GdkGLPixmap *glpixmap; GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_PIXMAP (pixmap), NULL); g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), NULL); if (quark_gl_pixmap == 0) quark_gl_pixmap = g_quark_from_static_string (quark_gl_pixmap_string); /* If already set */ glpixmap = g_object_get_qdata (G_OBJECT (pixmap), quark_gl_pixmap); if (glpixmap != NULL) return glpixmap; /* * Create GdkGLPixmap */ glpixmap = gdk_gl_pixmap_new (glconfig, pixmap, attrib_list); if (glpixmap == NULL) { g_warning ("cannot create GdkGLPixmap\n"); return NULL; } g_object_set_qdata_full (G_OBJECT (pixmap), quark_gl_pixmap, glpixmap, (GDestroyNotify) g_object_unref); return glpixmap; }