sig
  type t
  val create : unit -> GluNurbs.t
  val begin_curve : GluNurbs.t -> unit
  val begin_surface : GluNurbs.t -> unit
  val begin_trim : GluNurbs.t -> unit
  val end_curve : GluNurbs.t -> unit
  val end_surface : GluNurbs.t -> unit
  val end_trim : GluNurbs.t -> unit
  val load_sampling_matrices :
    GluNurbs.t ->
    model:[ `float ] Raw.t ->
    persp:[ `float ] Raw.t -> view:[ `int ] Raw.t -> unit
  val curve :
    GluNurbs.t ->
    knots:float array ->
    control:float array -> order:int -> kind:[< GlMap.target ] -> unit
  val pwl_curve :
    GluNurbs.t -> kind:[ `trim_2 | `trim_3 ] -> float array -> unit
  val surface :
    GluNurbs.t ->
    sknots:float array ->
    tknots:float array ->
    control:float array array ->
    sorder:int -> torder:int -> target:[< Gl.target ] -> unit
  type property =
      [ `auto_load_matrix of bool
      | `culling of bool
      | `display_mode of [ `fill | `patch | `polygon ]
      | `parametric_tolerance of float
      | `sampling_method of
          [ `domain_distance | `parametric_error | `path_length ]
      | `sampling_tolerance of int
      | `u_step of int
      | `v_step of int ]
  val property : GluNurbs.t -> GluNurbs.property -> unit
end