Beispiel #1
0
/**
 * gdk_gl_window_get_window:
 * @glwindow: a #GdkGLWindow.
 *
 * Returns the #GdkWindow associated with @glwindow.
 *
 * Return value: the #GdkWindow associated with @glwindow.
 **/
GdkWindow *
gdk_gl_window_get_window (GdkGLWindow *glwindow)
{
  g_return_val_if_fail (GDK_IS_GL_WINDOW (glwindow), NULL);

  return glwindow->window;
}
Beispiel #2
0
GdkGLConfig*
gdk_gl_window_get_gl_config (GdkGLDrawable *gldrawable)
{
  g_return_val_if_fail (GDK_IS_GL_WINDOW (gldrawable), NULL);

  return GDK_GL_WINDOW (gldrawable)->glconfig;
}
Beispiel #3
0
/*< private >*/
void
_gdk_gl_window_get_size (GdkGLDrawable *gldrawable, gint *width, gint *height)
{
  g_return_if_fail (GDK_IS_GL_WINDOW (gldrawable));

  GdkDrawable *real_drawable = ((GdkGLWindow *) gldrawable)->drawable;

  GDK_DRAWABLE_GET_CLASS (real_drawable)->get_size (real_drawable, width, height);
}
Beispiel #4
0
static GdkGLConfig *
_gdk_gl_window_get_gl_config (GdkGLDrawable *gldrawable)
{
  GdkGLWindow *glwindow;

  g_return_val_if_fail(GDK_IS_GL_WINDOW(gldrawable), NULL);

  glwindow = GDK_GL_WINDOW (gldrawable);

  return GDK_GL_WINDOW_IMPL_GET_CLASS (glwindow->impl)->get_gl_config (glwindow);
}
Beispiel #5
0
static void
_gdk_gl_window_wait_gdk (GdkGLDrawable *gldrawable)
{
  GdkGLWindow *glwindow;

  g_return_if_fail(GDK_IS_GL_WINDOW(gldrawable));

  glwindow = GDK_GL_WINDOW (gldrawable);

  GDK_GL_WINDOW_IMPL_GET_CLASS (glwindow->impl)->wait_gdk (glwindow);
}
Beispiel #6
0
static gboolean
_gdk_gl_window_is_double_buffered (GdkGLDrawable *gldrawable)
{
  GdkGLWindow *glwindow;

  g_return_val_if_fail(GDK_IS_GL_WINDOW(gldrawable), FALSE);

  glwindow = GDK_GL_WINDOW (gldrawable);

  return GDK_GL_WINDOW_IMPL_GET_CLASS (glwindow->impl)->is_double_buffered (glwindow);
}
Beispiel #7
0
void
gdk_gl_window_swap_buffers (GdkGLDrawable *gldrawable)
{
  g_return_if_fail (GDK_IS_GL_WINDOW(gldrawable));

  Display *xdisplay = GDK_GL_CONFIG_XDISPLAY (GDK_GL_WINDOW (gldrawable)->glconfig);
  Window glxwindow = GDK_GL_WINDOW (gldrawable)->glxwindow;

  if (glxwindow == None)
    return;

  GDK_GL_NOTE_FUNC_IMPL ("glXSwapBuffers");

  glXSwapBuffers (xdisplay, glxwindow);
}
Beispiel #8
0
static GdkGLContext *
_gdk_gl_window_create_gl_context  (GdkGLDrawable *gldrawable,
                                   GdkGLContext  *share_list,
                                   gboolean       direct,
                                   int            render_type)
{
  GdkGLWindow *glwindow;

  g_return_val_if_fail(GDK_IS_GL_WINDOW(gldrawable), NULL);

  glwindow = GDK_GL_WINDOW (gldrawable);

  return GDK_GL_WINDOW_IMPL_GET_CLASS (glwindow->impl)->create_gl_context (glwindow,
                                                                           share_list,
                                                                           direct,
                                                                           render_type);
}
Beispiel #9
0
gboolean
gdk_gl_window_make_context_current (GdkGLDrawable *draw, GdkGLContext *glcontext)
{
  GdkGLDrawable *read = draw;
  GdkGLConfig *glconfig;
  Window glxwindow;
  GLXContext glxcontext;

  g_return_val_if_fail (GDK_IS_GL_WINDOW (draw), FALSE);
  g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), FALSE);

  glconfig = GDK_GL_WINDOW (draw)->glconfig;
  glxwindow = GDK_GL_WINDOW (draw)->glxwindow;
  glxcontext = GDK_GL_CONTEXT_GLXCONTEXT (glcontext);

  if (glxwindow == None || glxcontext == NULL)
    return FALSE;

  GDK_GL_NOTE (MISC, g_message (" -- Window: screen number = %d", GDK_SCREEN_XNUMBER (gdk_drawable_get_screen (GDK_DRAWABLE (draw)))));
  GDK_GL_NOTE (MISC, g_message (" -- Window: visual id = 0x%lx", GDK_VISUAL_XVISUAL (gdk_drawable_get_visual (GDK_DRAWABLE (draw)))->visualid));

  GDK_GL_NOTE_FUNC_IMPL ("glXMakeCurrent");

  if (!glXMakeCurrent (GDK_GL_CONFIG_XDISPLAY (glconfig), glxwindow, glxcontext))
    {
      g_warning ("glXMakeCurrent() failed");
      _gdk_gl_context_set_gl_drawable (glcontext, NULL);
      return FALSE;
    }

  _gdk_gl_context_set_gl_drawable (glcontext, draw);

  if (_GDK_GL_CONFIG_AS_SINGLE_MODE (glconfig))
    {
      /* We do this because we are treating a double-buffered frame
         buffer as a single-buffered frame buffer because the system
         does not appear to export any suitable single-buffered
         visuals (in which the following are necessary). */
      glDrawBuffer (GL_FRONT);
      glReadBuffer (GL_FRONT);
    }

  GDK_GL_NOTE (MISC, _gdk_gl_print_gl_info ());

  return TRUE;
}