### Function

# Gdk cairo_draw_from_gl

#### Declaration [src]

    void
    gdk_cairo_draw_from_gl (
      cairo_t* cr,
      GdkSurface* surface,
      int source,
      int source_type,
      int buffer_scale,
      int x,
      int y,
      int width,
      int height
    )

#### Description [src]

The main way to draw GL content in GTK.

It takes a render buffer ID (`source_type` == GL_RENDERBUFFER) or a texture id (`source_type` == GL_TEXTURE) and draws it onto `cr` with an OVER operation, respecting the current clip. The top left corner of the rectangle specified by `x`, `y`, `width` and `height` will be drawn at the current (0,0) position of the `cairo_t`.

This will work for all `cairo_t`, as long as `surface` is realized, but the fallback implementation that reads back the pixels from the buffer may be used in the general case. In the case of direct drawing to a surface with no special effects applied to `cr` it will however use a more efficient approach.

For GL_RENDERBUFFER the code will always fall back to software for buffers with alpha components, so make sure you use GL_TEXTURE if using alpha.

Calling this may change the current GL context.

#### Parameters

`cr` | `cairo_t*`
| A cairo context.
| The data is owned by the caller of the function.
`surface` | `GdkSurface`
| The surface we’re rendering for (not necessarily into).
| The data is owned by the caller of the function.
`source` | `int`
| The GL ID of the source buffer.
`source_type` | `int`
| The type of the `source`.
`buffer_scale` | `int`
| The scale-factor that the `source` buffer is allocated for.
`x` | `int`
| The source x position in `source` to start copying from in GL coordinates.
`y` | `int`
| The source y position in `source` to start copying from in GL coordinates.
`width` | `int`
| The width of the region to draw.
`height` | `int`
| The height of the region to draw.