sig
  type visual_options =
      [ `ACCUM_ALPHA_SIZE of int
      | `ACCUM_GREEN_SIZE of int
      | `ALPHA_SIZE of int
      | `AUX_BUFFERS of int
      | `BLUE_SIZE of int
      | `BUFFER_SIZE of int
      | `DEPTH_SIZE of int
      | `DOUBLEBUFFER
      | `GREEN_SIZE of int
      | `LEVEL of int
      | `RED_SIZE of int
      | `RGBA
      | `STENCIL_SIZE of int
      | `STEREO
      | `USE_GL ]
  type gl_area = [ `drawingarea | `glarea | `gtk | `widget ]
  module GtkRaw :
    sig
      external create :
        GlGtk.visual_options list ->
        share:[> `glarea ] Gtk.optobj -> GlGtk.gl_area Gtk.obj
        = "ml_gtk_gl_area_new"
      external swap_buffers : [> `glarea ] Gtk.obj -> unit
        = "ml_gtk_gl_area_swap_buffers"
      external make_current : [> `glarea ] Gtk.obj -> bool
        = "ml_gtk_gl_area_make_current"
    end
  class area_signals :
    ([> GlGtk.gl_area ] as 'b) Gtk.obj ->
    object ('a)
      val obj : 'Gtk.obj
      method after : 'a
      method destroy : callback:(unit -> unit) -> GtkSignal.id
      method display : callback:(unit -> unit) -> GtkSignal.id
      method realize : callback:(unit -> unit) -> GtkSignal.id
      method reshape :
        callback:(width:int -> height:int -> unit) -> GtkSignal.id
    end
  class area :
    GlGtk.gl_area Gtk.obj ->
    object
      val obj : GlGtk.gl_area Gtk.obj
      method as_area : GlGtk.gl_area Gtk.obj
      method as_widget : Gtk.widget Gtk.obj
      method coerce : GObj.widget
      method connect : GlGtk.area_signals
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method event : GObj.event_ops
      method get_oid : int
      method make_current : unit -> unit
      method misc : GObj.misc_ops
      method set_size : width:int -> height:int -> unit
      method swap_buffers : unit -> unit
    end
  val area :
    GlGtk.visual_options list ->
    ?share:GlGtk.area ->
    ?width:int ->
    ?height:int ->
    ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> GlGtk.area
  val region_of_raw : 'Raw.t -> Gpointer.region
end