graphene_sys/
lib.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5#![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
6#![allow(
7    clippy::approx_constant,
8    clippy::type_complexity,
9    clippy::unreadable_literal,
10    clippy::upper_case_acronyms
11)]
12#![cfg_attr(docsrs, feature(doc_cfg))]
13
14use glib_sys as glib;
15
16#[cfg(unix)]
17#[allow(unused_imports)]
18use libc::{dev_t, gid_t, pid_t, socklen_t, uid_t};
19#[allow(unused_imports)]
20use libc::{intptr_t, off_t, size_t, ssize_t, time_t, uintptr_t, FILE};
21#[allow(unused_imports)]
22use std::ffi::{
23    c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, c_void,
24};
25
26#[allow(unused_imports)]
27use glib::{gboolean, gconstpointer, gpointer, GType};
28
29// Enums
30pub type graphene_euler_order_t = c_int;
31pub const GRAPHENE_EULER_ORDER_DEFAULT: graphene_euler_order_t = -1;
32pub const GRAPHENE_EULER_ORDER_XYZ: graphene_euler_order_t = 0;
33pub const GRAPHENE_EULER_ORDER_YZX: graphene_euler_order_t = 1;
34pub const GRAPHENE_EULER_ORDER_ZXY: graphene_euler_order_t = 2;
35pub const GRAPHENE_EULER_ORDER_XZY: graphene_euler_order_t = 3;
36pub const GRAPHENE_EULER_ORDER_YXZ: graphene_euler_order_t = 4;
37pub const GRAPHENE_EULER_ORDER_ZYX: graphene_euler_order_t = 5;
38pub const GRAPHENE_EULER_ORDER_SXYZ: graphene_euler_order_t = 6;
39pub const GRAPHENE_EULER_ORDER_SXYX: graphene_euler_order_t = 7;
40pub const GRAPHENE_EULER_ORDER_SXZY: graphene_euler_order_t = 8;
41pub const GRAPHENE_EULER_ORDER_SXZX: graphene_euler_order_t = 9;
42pub const GRAPHENE_EULER_ORDER_SYZX: graphene_euler_order_t = 10;
43pub const GRAPHENE_EULER_ORDER_SYZY: graphene_euler_order_t = 11;
44pub const GRAPHENE_EULER_ORDER_SYXZ: graphene_euler_order_t = 12;
45pub const GRAPHENE_EULER_ORDER_SYXY: graphene_euler_order_t = 13;
46pub const GRAPHENE_EULER_ORDER_SZXY: graphene_euler_order_t = 14;
47pub const GRAPHENE_EULER_ORDER_SZXZ: graphene_euler_order_t = 15;
48pub const GRAPHENE_EULER_ORDER_SZYX: graphene_euler_order_t = 16;
49pub const GRAPHENE_EULER_ORDER_SZYZ: graphene_euler_order_t = 17;
50pub const GRAPHENE_EULER_ORDER_RZYX: graphene_euler_order_t = 18;
51pub const GRAPHENE_EULER_ORDER_RXYX: graphene_euler_order_t = 19;
52pub const GRAPHENE_EULER_ORDER_RYZX: graphene_euler_order_t = 20;
53pub const GRAPHENE_EULER_ORDER_RXZX: graphene_euler_order_t = 21;
54pub const GRAPHENE_EULER_ORDER_RXZY: graphene_euler_order_t = 22;
55pub const GRAPHENE_EULER_ORDER_RYZY: graphene_euler_order_t = 23;
56pub const GRAPHENE_EULER_ORDER_RZXY: graphene_euler_order_t = 24;
57pub const GRAPHENE_EULER_ORDER_RYXY: graphene_euler_order_t = 25;
58pub const GRAPHENE_EULER_ORDER_RYXZ: graphene_euler_order_t = 26;
59pub const GRAPHENE_EULER_ORDER_RZXZ: graphene_euler_order_t = 27;
60pub const GRAPHENE_EULER_ORDER_RXYZ: graphene_euler_order_t = 28;
61pub const GRAPHENE_EULER_ORDER_RZYZ: graphene_euler_order_t = 29;
62
63pub type graphene_ray_intersection_kind_t = c_int;
64pub const GRAPHENE_RAY_INTERSECTION_KIND_NONE: graphene_ray_intersection_kind_t = 0;
65pub const GRAPHENE_RAY_INTERSECTION_KIND_ENTER: graphene_ray_intersection_kind_t = 1;
66pub const GRAPHENE_RAY_INTERSECTION_KIND_LEAVE: graphene_ray_intersection_kind_t = 2;
67
68// Constants
69pub const GRAPHENE_VEC2_LEN: c_int = 2;
70pub const GRAPHENE_VEC3_LEN: c_int = 3;
71pub const GRAPHENE_VEC4_LEN: c_int = 4;
72
73// Records
74#[derive(Copy, Clone)]
75#[repr(C)]
76pub struct graphene_box_t {
77    pub min: graphene_vec3_t,
78    pub max: graphene_vec3_t,
79}
80
81impl ::std::fmt::Debug for graphene_box_t {
82    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
83        f.debug_struct(&format!("graphene_box_t @ {self:p}"))
84            .finish()
85    }
86}
87
88#[derive(Copy, Clone)]
89#[repr(C)]
90pub struct graphene_euler_t {
91    pub angles: graphene_vec3_t,
92    pub order: graphene_euler_order_t,
93}
94
95impl ::std::fmt::Debug for graphene_euler_t {
96    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
97        f.debug_struct(&format!("graphene_euler_t @ {self:p}"))
98            .finish()
99    }
100}
101
102#[derive(Copy, Clone)]
103#[repr(C)]
104pub struct graphene_frustum_t {
105    pub planes: [graphene_plane_t; 6],
106}
107
108impl ::std::fmt::Debug for graphene_frustum_t {
109    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
110        f.debug_struct(&format!("graphene_frustum_t @ {self:p}"))
111            .finish()
112    }
113}
114
115#[repr(align(16))]
116#[derive(Copy, Clone)]
117#[repr(C)]
118pub struct graphene_matrix_t {
119    pub value: graphene_simd4x4f_t,
120}
121
122impl ::std::fmt::Debug for graphene_matrix_t {
123    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
124        f.debug_struct(&format!("graphene_matrix_t @ {self:p}"))
125            .finish()
126    }
127}
128
129#[derive(Copy, Clone)]
130#[repr(C)]
131pub struct graphene_plane_t {
132    pub normal: graphene_vec3_t,
133    pub constant: c_float,
134}
135
136impl ::std::fmt::Debug for graphene_plane_t {
137    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
138        f.debug_struct(&format!("graphene_plane_t @ {self:p}"))
139            .finish()
140    }
141}
142
143#[derive(Copy, Clone)]
144#[repr(C)]
145pub struct graphene_point3d_t {
146    pub x: c_float,
147    pub y: c_float,
148    pub z: c_float,
149}
150
151impl ::std::fmt::Debug for graphene_point3d_t {
152    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
153        f.debug_struct(&format!("graphene_point3d_t @ {self:p}"))
154            .field("x", &self.x)
155            .field("y", &self.y)
156            .field("z", &self.z)
157            .finish()
158    }
159}
160
161#[derive(Copy, Clone)]
162#[repr(C)]
163pub struct graphene_point_t {
164    pub x: c_float,
165    pub y: c_float,
166}
167
168impl ::std::fmt::Debug for graphene_point_t {
169    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
170        f.debug_struct(&format!("graphene_point_t @ {self:p}"))
171            .field("x", &self.x)
172            .field("y", &self.y)
173            .finish()
174    }
175}
176
177#[derive(Copy, Clone)]
178#[repr(C)]
179pub struct graphene_quad_t {
180    pub points: [graphene_point_t; 4],
181}
182
183impl ::std::fmt::Debug for graphene_quad_t {
184    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
185        f.debug_struct(&format!("graphene_quad_t @ {self:p}"))
186            .finish()
187    }
188}
189
190#[derive(Copy, Clone)]
191#[repr(C)]
192pub struct graphene_quaternion_t {
193    pub x: c_float,
194    pub y: c_float,
195    pub z: c_float,
196    pub w: c_float,
197}
198
199impl ::std::fmt::Debug for graphene_quaternion_t {
200    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
201        f.debug_struct(&format!("graphene_quaternion_t @ {self:p}"))
202            .finish()
203    }
204}
205
206#[derive(Copy, Clone)]
207#[repr(C)]
208pub struct graphene_ray_t {
209    pub origin: graphene_vec3_t,
210    pub direction: graphene_vec3_t,
211}
212
213impl ::std::fmt::Debug for graphene_ray_t {
214    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
215        f.debug_struct(&format!("graphene_ray_t @ {self:p}"))
216            .finish()
217    }
218}
219
220#[derive(Copy, Clone)]
221#[repr(C)]
222pub struct graphene_rect_t {
223    pub origin: graphene_point_t,
224    pub size: graphene_size_t,
225}
226
227impl ::std::fmt::Debug for graphene_rect_t {
228    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
229        f.debug_struct(&format!("graphene_rect_t @ {self:p}"))
230            .field("origin", &self.origin)
231            .field("size", &self.size)
232            .finish()
233    }
234}
235
236#[repr(align(16))]
237#[derive(Copy, Clone)]
238#[repr(C)]
239pub struct graphene_simd4f_t {
240    pub x: c_float,
241    pub y: c_float,
242    pub z: c_float,
243    pub w: c_float,
244}
245
246impl ::std::fmt::Debug for graphene_simd4f_t {
247    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
248        f.debug_struct(&format!("graphene_simd4f_t @ {self:p}"))
249            .finish()
250    }
251}
252
253#[repr(align(16))]
254#[derive(Copy, Clone)]
255#[repr(C)]
256pub struct graphene_simd4x4f_t {
257    pub x: graphene_simd4f_t,
258    pub y: graphene_simd4f_t,
259    pub z: graphene_simd4f_t,
260    pub w: graphene_simd4f_t,
261}
262
263impl ::std::fmt::Debug for graphene_simd4x4f_t {
264    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
265        f.debug_struct(&format!("graphene_simd4x4f_t @ {self:p}"))
266            .finish()
267    }
268}
269
270#[derive(Copy, Clone)]
271#[repr(C)]
272pub struct graphene_size_t {
273    pub width: c_float,
274    pub height: c_float,
275}
276
277impl ::std::fmt::Debug for graphene_size_t {
278    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
279        f.debug_struct(&format!("graphene_size_t @ {self:p}"))
280            .field("width", &self.width)
281            .field("height", &self.height)
282            .finish()
283    }
284}
285
286#[derive(Copy, Clone)]
287#[repr(C)]
288pub struct graphene_sphere_t {
289    pub center: graphene_vec3_t,
290    pub radius: c_float,
291}
292
293impl ::std::fmt::Debug for graphene_sphere_t {
294    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
295        f.debug_struct(&format!("graphene_sphere_t @ {self:p}"))
296            .finish()
297    }
298}
299
300#[derive(Copy, Clone)]
301#[repr(C)]
302pub struct graphene_triangle_t {
303    pub a: graphene_vec3_t,
304    pub b: graphene_vec3_t,
305    pub c: graphene_vec3_t,
306}
307
308impl ::std::fmt::Debug for graphene_triangle_t {
309    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
310        f.debug_struct(&format!("graphene_triangle_t @ {self:p}"))
311            .finish()
312    }
313}
314
315#[repr(align(16))]
316#[derive(Copy, Clone)]
317#[repr(C)]
318pub struct graphene_vec2_t {
319    pub value: graphene_simd4f_t,
320}
321
322impl ::std::fmt::Debug for graphene_vec2_t {
323    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
324        f.debug_struct(&format!("graphene_vec2_t @ {self:p}"))
325            .finish()
326    }
327}
328
329#[repr(align(16))]
330#[derive(Copy, Clone)]
331#[repr(C)]
332pub struct graphene_vec3_t {
333    pub value: graphene_simd4f_t,
334}
335
336impl ::std::fmt::Debug for graphene_vec3_t {
337    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
338        f.debug_struct(&format!("graphene_vec3_t @ {self:p}"))
339            .finish()
340    }
341}
342
343#[repr(align(16))]
344#[derive(Copy, Clone)]
345#[repr(C)]
346pub struct graphene_vec4_t {
347    pub value: graphene_simd4f_t,
348}
349
350impl ::std::fmt::Debug for graphene_vec4_t {
351    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
352        f.debug_struct(&format!("graphene_vec4_t @ {self:p}"))
353            .finish()
354    }
355}
356
357extern "C" {
358
359    //=========================================================================
360    // graphene_box_t
361    //=========================================================================
362    pub fn graphene_box_get_type() -> GType;
363    pub fn graphene_box_alloc() -> *mut graphene_box_t;
364    pub fn graphene_box_contains_box(a: *const graphene_box_t, b: *const graphene_box_t) -> bool;
365    pub fn graphene_box_contains_point(
366        box_: *const graphene_box_t,
367        point: *const graphene_point3d_t,
368    ) -> bool;
369    pub fn graphene_box_equal(a: *const graphene_box_t, b: *const graphene_box_t) -> bool;
370    pub fn graphene_box_expand(
371        box_: *const graphene_box_t,
372        point: *const graphene_point3d_t,
373        res: *mut graphene_box_t,
374    );
375    pub fn graphene_box_expand_scalar(
376        box_: *const graphene_box_t,
377        scalar: c_float,
378        res: *mut graphene_box_t,
379    );
380    pub fn graphene_box_expand_vec3(
381        box_: *const graphene_box_t,
382        vec: *const graphene_vec3_t,
383        res: *mut graphene_box_t,
384    );
385    pub fn graphene_box_free(box_: *mut graphene_box_t);
386    pub fn graphene_box_get_bounding_sphere(
387        box_: *const graphene_box_t,
388        sphere: *mut graphene_sphere_t,
389    );
390    pub fn graphene_box_get_center(box_: *const graphene_box_t, center: *mut graphene_point3d_t);
391    pub fn graphene_box_get_depth(box_: *const graphene_box_t) -> c_float;
392    pub fn graphene_box_get_height(box_: *const graphene_box_t) -> c_float;
393    pub fn graphene_box_get_max(box_: *const graphene_box_t, max: *mut graphene_point3d_t);
394    pub fn graphene_box_get_min(box_: *const graphene_box_t, min: *mut graphene_point3d_t);
395    pub fn graphene_box_get_size(box_: *const graphene_box_t, size: *mut graphene_vec3_t);
396    pub fn graphene_box_get_vertices(
397        box_: *const graphene_box_t,
398        vertices: *mut [graphene_vec3_t; 8],
399    );
400    pub fn graphene_box_get_width(box_: *const graphene_box_t) -> c_float;
401    pub fn graphene_box_init(
402        box_: *mut graphene_box_t,
403        min: *const graphene_point3d_t,
404        max: *const graphene_point3d_t,
405    ) -> *mut graphene_box_t;
406    pub fn graphene_box_init_from_box(
407        box_: *mut graphene_box_t,
408        src: *const graphene_box_t,
409    ) -> *mut graphene_box_t;
410    pub fn graphene_box_init_from_points(
411        box_: *mut graphene_box_t,
412        n_points: c_uint,
413        points: *const graphene_point3d_t,
414    ) -> *mut graphene_box_t;
415    pub fn graphene_box_init_from_vec3(
416        box_: *mut graphene_box_t,
417        min: *const graphene_vec3_t,
418        max: *const graphene_vec3_t,
419    ) -> *mut graphene_box_t;
420    pub fn graphene_box_init_from_vectors(
421        box_: *mut graphene_box_t,
422        n_vectors: c_uint,
423        vectors: *const graphene_vec3_t,
424    ) -> *mut graphene_box_t;
425    pub fn graphene_box_intersection(
426        a: *const graphene_box_t,
427        b: *const graphene_box_t,
428        res: *mut graphene_box_t,
429    ) -> bool;
430    pub fn graphene_box_union(
431        a: *const graphene_box_t,
432        b: *const graphene_box_t,
433        res: *mut graphene_box_t,
434    );
435    pub fn graphene_box_empty() -> *const graphene_box_t;
436    pub fn graphene_box_infinite() -> *const graphene_box_t;
437    pub fn graphene_box_minus_one() -> *const graphene_box_t;
438    pub fn graphene_box_one() -> *const graphene_box_t;
439    pub fn graphene_box_one_minus_one() -> *const graphene_box_t;
440    pub fn graphene_box_zero() -> *const graphene_box_t;
441
442    //=========================================================================
443    // graphene_euler_t
444    //=========================================================================
445    pub fn graphene_euler_get_type() -> GType;
446    pub fn graphene_euler_alloc() -> *mut graphene_euler_t;
447    pub fn graphene_euler_equal(a: *const graphene_euler_t, b: *const graphene_euler_t) -> bool;
448    pub fn graphene_euler_free(e: *mut graphene_euler_t);
449    pub fn graphene_euler_get_alpha(e: *const graphene_euler_t) -> c_float;
450    pub fn graphene_euler_get_beta(e: *const graphene_euler_t) -> c_float;
451    pub fn graphene_euler_get_gamma(e: *const graphene_euler_t) -> c_float;
452    pub fn graphene_euler_get_order(e: *const graphene_euler_t) -> graphene_euler_order_t;
453    pub fn graphene_euler_get_x(e: *const graphene_euler_t) -> c_float;
454    pub fn graphene_euler_get_y(e: *const graphene_euler_t) -> c_float;
455    pub fn graphene_euler_get_z(e: *const graphene_euler_t) -> c_float;
456    pub fn graphene_euler_init(
457        e: *mut graphene_euler_t,
458        x: c_float,
459        y: c_float,
460        z: c_float,
461    ) -> *mut graphene_euler_t;
462    pub fn graphene_euler_init_from_euler(
463        e: *mut graphene_euler_t,
464        src: *const graphene_euler_t,
465    ) -> *mut graphene_euler_t;
466    pub fn graphene_euler_init_from_matrix(
467        e: *mut graphene_euler_t,
468        m: *const graphene_matrix_t,
469        order: graphene_euler_order_t,
470    ) -> *mut graphene_euler_t;
471    pub fn graphene_euler_init_from_quaternion(
472        e: *mut graphene_euler_t,
473        q: *const graphene_quaternion_t,
474        order: graphene_euler_order_t,
475    ) -> *mut graphene_euler_t;
476    pub fn graphene_euler_init_from_radians(
477        e: *mut graphene_euler_t,
478        x: c_float,
479        y: c_float,
480        z: c_float,
481        order: graphene_euler_order_t,
482    ) -> *mut graphene_euler_t;
483    pub fn graphene_euler_init_from_vec3(
484        e: *mut graphene_euler_t,
485        v: *const graphene_vec3_t,
486        order: graphene_euler_order_t,
487    ) -> *mut graphene_euler_t;
488    pub fn graphene_euler_init_with_order(
489        e: *mut graphene_euler_t,
490        x: c_float,
491        y: c_float,
492        z: c_float,
493        order: graphene_euler_order_t,
494    ) -> *mut graphene_euler_t;
495    pub fn graphene_euler_reorder(
496        e: *const graphene_euler_t,
497        order: graphene_euler_order_t,
498        res: *mut graphene_euler_t,
499    );
500    pub fn graphene_euler_to_matrix(e: *const graphene_euler_t, res: *mut graphene_matrix_t);
501    pub fn graphene_euler_to_quaternion(
502        e: *const graphene_euler_t,
503        res: *mut graphene_quaternion_t,
504    );
505    pub fn graphene_euler_to_vec3(e: *const graphene_euler_t, res: *mut graphene_vec3_t);
506
507    //=========================================================================
508    // graphene_frustum_t
509    //=========================================================================
510    pub fn graphene_frustum_get_type() -> GType;
511    pub fn graphene_frustum_alloc() -> *mut graphene_frustum_t;
512    pub fn graphene_frustum_contains_point(
513        f: *const graphene_frustum_t,
514        point: *const graphene_point3d_t,
515    ) -> bool;
516    pub fn graphene_frustum_equal(
517        a: *const graphene_frustum_t,
518        b: *const graphene_frustum_t,
519    ) -> bool;
520    pub fn graphene_frustum_free(f: *mut graphene_frustum_t);
521    pub fn graphene_frustum_get_planes(
522        f: *const graphene_frustum_t,
523        planes: *mut [graphene_plane_t; 6],
524    );
525    pub fn graphene_frustum_init(
526        f: *mut graphene_frustum_t,
527        p0: *const graphene_plane_t,
528        p1: *const graphene_plane_t,
529        p2: *const graphene_plane_t,
530        p3: *const graphene_plane_t,
531        p4: *const graphene_plane_t,
532        p5: *const graphene_plane_t,
533    ) -> *mut graphene_frustum_t;
534    pub fn graphene_frustum_init_from_frustum(
535        f: *mut graphene_frustum_t,
536        src: *const graphene_frustum_t,
537    ) -> *mut graphene_frustum_t;
538    pub fn graphene_frustum_init_from_matrix(
539        f: *mut graphene_frustum_t,
540        matrix: *const graphene_matrix_t,
541    ) -> *mut graphene_frustum_t;
542    pub fn graphene_frustum_intersects_box(
543        f: *const graphene_frustum_t,
544        box_: *const graphene_box_t,
545    ) -> bool;
546    pub fn graphene_frustum_intersects_sphere(
547        f: *const graphene_frustum_t,
548        sphere: *const graphene_sphere_t,
549    ) -> bool;
550
551    //=========================================================================
552    // graphene_matrix_t
553    //=========================================================================
554    pub fn graphene_matrix_get_type() -> GType;
555    pub fn graphene_matrix_alloc() -> *mut graphene_matrix_t;
556    pub fn graphene_matrix_decompose(
557        m: *const graphene_matrix_t,
558        translate: *mut graphene_vec3_t,
559        scale: *mut graphene_vec3_t,
560        rotate: *mut graphene_quaternion_t,
561        shear: *mut graphene_vec3_t,
562        perspective: *mut graphene_vec4_t,
563    ) -> bool;
564    pub fn graphene_matrix_determinant(m: *const graphene_matrix_t) -> c_float;
565    pub fn graphene_matrix_equal(a: *const graphene_matrix_t, b: *const graphene_matrix_t) -> bool;
566    pub fn graphene_matrix_equal_fast(
567        a: *const graphene_matrix_t,
568        b: *const graphene_matrix_t,
569    ) -> bool;
570    pub fn graphene_matrix_free(m: *mut graphene_matrix_t);
571    pub fn graphene_matrix_get_row(
572        m: *const graphene_matrix_t,
573        index_: c_uint,
574        res: *mut graphene_vec4_t,
575    );
576    pub fn graphene_matrix_get_value(
577        m: *const graphene_matrix_t,
578        row: c_uint,
579        col: c_uint,
580    ) -> c_float;
581    pub fn graphene_matrix_get_x_scale(m: *const graphene_matrix_t) -> c_float;
582    pub fn graphene_matrix_get_x_translation(m: *const graphene_matrix_t) -> c_float;
583    pub fn graphene_matrix_get_y_scale(m: *const graphene_matrix_t) -> c_float;
584    pub fn graphene_matrix_get_y_translation(m: *const graphene_matrix_t) -> c_float;
585    pub fn graphene_matrix_get_z_scale(m: *const graphene_matrix_t) -> c_float;
586    pub fn graphene_matrix_get_z_translation(m: *const graphene_matrix_t) -> c_float;
587    pub fn graphene_matrix_init_from_2d(
588        m: *mut graphene_matrix_t,
589        xx: c_double,
590        yx: c_double,
591        xy: c_double,
592        yy: c_double,
593        x_0: c_double,
594        y_0: c_double,
595    ) -> *mut graphene_matrix_t;
596    pub fn graphene_matrix_init_from_float(
597        m: *mut graphene_matrix_t,
598        v: *const [c_float; 16],
599    ) -> *mut graphene_matrix_t;
600    pub fn graphene_matrix_init_from_matrix(
601        m: *mut graphene_matrix_t,
602        src: *const graphene_matrix_t,
603    ) -> *mut graphene_matrix_t;
604    pub fn graphene_matrix_init_from_vec4(
605        m: *mut graphene_matrix_t,
606        v0: *const graphene_vec4_t,
607        v1: *const graphene_vec4_t,
608        v2: *const graphene_vec4_t,
609        v3: *const graphene_vec4_t,
610    ) -> *mut graphene_matrix_t;
611    pub fn graphene_matrix_init_frustum(
612        m: *mut graphene_matrix_t,
613        left: c_float,
614        right: c_float,
615        bottom: c_float,
616        top: c_float,
617        z_near: c_float,
618        z_far: c_float,
619    ) -> *mut graphene_matrix_t;
620    pub fn graphene_matrix_init_identity(m: *mut graphene_matrix_t) -> *mut graphene_matrix_t;
621    pub fn graphene_matrix_init_look_at(
622        m: *mut graphene_matrix_t,
623        eye: *const graphene_vec3_t,
624        center: *const graphene_vec3_t,
625        up: *const graphene_vec3_t,
626    ) -> *mut graphene_matrix_t;
627    pub fn graphene_matrix_init_ortho(
628        m: *mut graphene_matrix_t,
629        left: c_float,
630        right: c_float,
631        top: c_float,
632        bottom: c_float,
633        z_near: c_float,
634        z_far: c_float,
635    ) -> *mut graphene_matrix_t;
636    pub fn graphene_matrix_init_perspective(
637        m: *mut graphene_matrix_t,
638        fovy: c_float,
639        aspect: c_float,
640        z_near: c_float,
641        z_far: c_float,
642    ) -> *mut graphene_matrix_t;
643    pub fn graphene_matrix_init_rotate(
644        m: *mut graphene_matrix_t,
645        angle: c_float,
646        axis: *const graphene_vec3_t,
647    ) -> *mut graphene_matrix_t;
648    pub fn graphene_matrix_init_scale(
649        m: *mut graphene_matrix_t,
650        x: c_float,
651        y: c_float,
652        z: c_float,
653    ) -> *mut graphene_matrix_t;
654    pub fn graphene_matrix_init_skew(
655        m: *mut graphene_matrix_t,
656        x_skew: c_float,
657        y_skew: c_float,
658    ) -> *mut graphene_matrix_t;
659    pub fn graphene_matrix_init_translate(
660        m: *mut graphene_matrix_t,
661        p: *const graphene_point3d_t,
662    ) -> *mut graphene_matrix_t;
663    pub fn graphene_matrix_interpolate(
664        a: *const graphene_matrix_t,
665        b: *const graphene_matrix_t,
666        factor: c_double,
667        res: *mut graphene_matrix_t,
668    );
669    pub fn graphene_matrix_inverse(
670        m: *const graphene_matrix_t,
671        res: *mut graphene_matrix_t,
672    ) -> bool;
673    pub fn graphene_matrix_is_2d(m: *const graphene_matrix_t) -> bool;
674    pub fn graphene_matrix_is_backface_visible(m: *const graphene_matrix_t) -> bool;
675    pub fn graphene_matrix_is_identity(m: *const graphene_matrix_t) -> bool;
676    pub fn graphene_matrix_is_singular(m: *const graphene_matrix_t) -> bool;
677    pub fn graphene_matrix_multiply(
678        a: *const graphene_matrix_t,
679        b: *const graphene_matrix_t,
680        res: *mut graphene_matrix_t,
681    );
682    pub fn graphene_matrix_near(
683        a: *const graphene_matrix_t,
684        b: *const graphene_matrix_t,
685        epsilon: c_float,
686    ) -> bool;
687    pub fn graphene_matrix_normalize(m: *const graphene_matrix_t, res: *mut graphene_matrix_t);
688    pub fn graphene_matrix_perspective(
689        m: *const graphene_matrix_t,
690        depth: c_float,
691        res: *mut graphene_matrix_t,
692    );
693    pub fn graphene_matrix_print(m: *const graphene_matrix_t);
694    pub fn graphene_matrix_project_point(
695        m: *const graphene_matrix_t,
696        p: *const graphene_point_t,
697        res: *mut graphene_point_t,
698    );
699    pub fn graphene_matrix_project_rect(
700        m: *const graphene_matrix_t,
701        r: *const graphene_rect_t,
702        res: *mut graphene_quad_t,
703    );
704    pub fn graphene_matrix_project_rect_bounds(
705        m: *const graphene_matrix_t,
706        r: *const graphene_rect_t,
707        res: *mut graphene_rect_t,
708    );
709    pub fn graphene_matrix_rotate(
710        m: *mut graphene_matrix_t,
711        angle: c_float,
712        axis: *const graphene_vec3_t,
713    );
714    pub fn graphene_matrix_rotate_euler(m: *mut graphene_matrix_t, e: *const graphene_euler_t);
715    pub fn graphene_matrix_rotate_quaternion(
716        m: *mut graphene_matrix_t,
717        q: *const graphene_quaternion_t,
718    );
719    pub fn graphene_matrix_rotate_x(m: *mut graphene_matrix_t, angle: c_float);
720    pub fn graphene_matrix_rotate_y(m: *mut graphene_matrix_t, angle: c_float);
721    pub fn graphene_matrix_rotate_z(m: *mut graphene_matrix_t, angle: c_float);
722    pub fn graphene_matrix_scale(
723        m: *mut graphene_matrix_t,
724        factor_x: c_float,
725        factor_y: c_float,
726        factor_z: c_float,
727    );
728    pub fn graphene_matrix_skew_xy(m: *mut graphene_matrix_t, factor: c_float);
729    pub fn graphene_matrix_skew_xz(m: *mut graphene_matrix_t, factor: c_float);
730    pub fn graphene_matrix_skew_yz(m: *mut graphene_matrix_t, factor: c_float);
731    pub fn graphene_matrix_to_2d(
732        m: *const graphene_matrix_t,
733        xx: *mut c_double,
734        yx: *mut c_double,
735        xy: *mut c_double,
736        yy: *mut c_double,
737        x_0: *mut c_double,
738        y_0: *mut c_double,
739    ) -> bool;
740    pub fn graphene_matrix_to_float(m: *const graphene_matrix_t, v: *mut [c_float; 16]);
741    pub fn graphene_matrix_transform_bounds(
742        m: *const graphene_matrix_t,
743        r: *const graphene_rect_t,
744        res: *mut graphene_rect_t,
745    );
746    pub fn graphene_matrix_transform_box(
747        m: *const graphene_matrix_t,
748        b: *const graphene_box_t,
749        res: *mut graphene_box_t,
750    );
751    pub fn graphene_matrix_transform_point(
752        m: *const graphene_matrix_t,
753        p: *const graphene_point_t,
754        res: *mut graphene_point_t,
755    );
756    pub fn graphene_matrix_transform_point3d(
757        m: *const graphene_matrix_t,
758        p: *const graphene_point3d_t,
759        res: *mut graphene_point3d_t,
760    );
761    pub fn graphene_matrix_transform_ray(
762        m: *const graphene_matrix_t,
763        r: *const graphene_ray_t,
764        res: *mut graphene_ray_t,
765    );
766    pub fn graphene_matrix_transform_rect(
767        m: *const graphene_matrix_t,
768        r: *const graphene_rect_t,
769        res: *mut graphene_quad_t,
770    );
771    pub fn graphene_matrix_transform_sphere(
772        m: *const graphene_matrix_t,
773        s: *const graphene_sphere_t,
774        res: *mut graphene_sphere_t,
775    );
776    pub fn graphene_matrix_transform_vec3(
777        m: *const graphene_matrix_t,
778        v: *const graphene_vec3_t,
779        res: *mut graphene_vec3_t,
780    );
781    pub fn graphene_matrix_transform_vec4(
782        m: *const graphene_matrix_t,
783        v: *const graphene_vec4_t,
784        res: *mut graphene_vec4_t,
785    );
786    pub fn graphene_matrix_translate(m: *mut graphene_matrix_t, pos: *const graphene_point3d_t);
787    pub fn graphene_matrix_transpose(m: *const graphene_matrix_t, res: *mut graphene_matrix_t);
788    pub fn graphene_matrix_unproject_point3d(
789        projection: *const graphene_matrix_t,
790        modelview: *const graphene_matrix_t,
791        point: *const graphene_point3d_t,
792        res: *mut graphene_point3d_t,
793    );
794    pub fn graphene_matrix_untransform_bounds(
795        m: *const graphene_matrix_t,
796        r: *const graphene_rect_t,
797        bounds: *const graphene_rect_t,
798        res: *mut graphene_rect_t,
799    );
800    pub fn graphene_matrix_untransform_point(
801        m: *const graphene_matrix_t,
802        p: *const graphene_point_t,
803        bounds: *const graphene_rect_t,
804        res: *mut graphene_point_t,
805    ) -> bool;
806
807    //=========================================================================
808    // graphene_plane_t
809    //=========================================================================
810    pub fn graphene_plane_get_type() -> GType;
811    pub fn graphene_plane_alloc() -> *mut graphene_plane_t;
812    pub fn graphene_plane_distance(
813        p: *const graphene_plane_t,
814        point: *const graphene_point3d_t,
815    ) -> c_float;
816    pub fn graphene_plane_equal(a: *const graphene_plane_t, b: *const graphene_plane_t) -> bool;
817    pub fn graphene_plane_free(p: *mut graphene_plane_t);
818    pub fn graphene_plane_get_constant(p: *const graphene_plane_t) -> c_float;
819    pub fn graphene_plane_get_normal(p: *const graphene_plane_t, normal: *mut graphene_vec3_t);
820    pub fn graphene_plane_init(
821        p: *mut graphene_plane_t,
822        normal: *const graphene_vec3_t,
823        constant: c_float,
824    ) -> *mut graphene_plane_t;
825    pub fn graphene_plane_init_from_plane(
826        p: *mut graphene_plane_t,
827        src: *const graphene_plane_t,
828    ) -> *mut graphene_plane_t;
829    pub fn graphene_plane_init_from_point(
830        p: *mut graphene_plane_t,
831        normal: *const graphene_vec3_t,
832        point: *const graphene_point3d_t,
833    ) -> *mut graphene_plane_t;
834    pub fn graphene_plane_init_from_points(
835        p: *mut graphene_plane_t,
836        a: *const graphene_point3d_t,
837        b: *const graphene_point3d_t,
838        c: *const graphene_point3d_t,
839    ) -> *mut graphene_plane_t;
840    pub fn graphene_plane_init_from_vec4(
841        p: *mut graphene_plane_t,
842        src: *const graphene_vec4_t,
843    ) -> *mut graphene_plane_t;
844    pub fn graphene_plane_negate(p: *const graphene_plane_t, res: *mut graphene_plane_t);
845    pub fn graphene_plane_normalize(p: *const graphene_plane_t, res: *mut graphene_plane_t);
846    pub fn graphene_plane_transform(
847        p: *const graphene_plane_t,
848        matrix: *const graphene_matrix_t,
849        normal_matrix: *const graphene_matrix_t,
850        res: *mut graphene_plane_t,
851    );
852
853    //=========================================================================
854    // graphene_point3d_t
855    //=========================================================================
856    pub fn graphene_point3d_get_type() -> GType;
857    pub fn graphene_point3d_alloc() -> *mut graphene_point3d_t;
858    pub fn graphene_point3d_cross(
859        a: *const graphene_point3d_t,
860        b: *const graphene_point3d_t,
861        res: *mut graphene_point3d_t,
862    );
863    pub fn graphene_point3d_distance(
864        a: *const graphene_point3d_t,
865        b: *const graphene_point3d_t,
866        delta: *mut graphene_vec3_t,
867    ) -> c_float;
868    pub fn graphene_point3d_dot(
869        a: *const graphene_point3d_t,
870        b: *const graphene_point3d_t,
871    ) -> c_float;
872    pub fn graphene_point3d_equal(
873        a: *const graphene_point3d_t,
874        b: *const graphene_point3d_t,
875    ) -> bool;
876    pub fn graphene_point3d_free(p: *mut graphene_point3d_t);
877    pub fn graphene_point3d_init(
878        p: *mut graphene_point3d_t,
879        x: c_float,
880        y: c_float,
881        z: c_float,
882    ) -> *mut graphene_point3d_t;
883    pub fn graphene_point3d_init_from_point(
884        p: *mut graphene_point3d_t,
885        src: *const graphene_point3d_t,
886    ) -> *mut graphene_point3d_t;
887    pub fn graphene_point3d_init_from_vec3(
888        p: *mut graphene_point3d_t,
889        v: *const graphene_vec3_t,
890    ) -> *mut graphene_point3d_t;
891    pub fn graphene_point3d_interpolate(
892        a: *const graphene_point3d_t,
893        b: *const graphene_point3d_t,
894        factor: c_double,
895        res: *mut graphene_point3d_t,
896    );
897    pub fn graphene_point3d_length(p: *const graphene_point3d_t) -> c_float;
898    pub fn graphene_point3d_near(
899        a: *const graphene_point3d_t,
900        b: *const graphene_point3d_t,
901        epsilon: c_float,
902    ) -> bool;
903    pub fn graphene_point3d_normalize(p: *const graphene_point3d_t, res: *mut graphene_point3d_t);
904    pub fn graphene_point3d_normalize_viewport(
905        p: *const graphene_point3d_t,
906        viewport: *const graphene_rect_t,
907        z_near: c_float,
908        z_far: c_float,
909        res: *mut graphene_point3d_t,
910    );
911    pub fn graphene_point3d_scale(
912        p: *const graphene_point3d_t,
913        factor: c_float,
914        res: *mut graphene_point3d_t,
915    );
916    pub fn graphene_point3d_to_vec3(p: *const graphene_point3d_t, v: *mut graphene_vec3_t);
917    pub fn graphene_point3d_zero() -> *const graphene_point3d_t;
918
919    //=========================================================================
920    // graphene_point_t
921    //=========================================================================
922    pub fn graphene_point_get_type() -> GType;
923    pub fn graphene_point_alloc() -> *mut graphene_point_t;
924    pub fn graphene_point_distance(
925        a: *const graphene_point_t,
926        b: *const graphene_point_t,
927        d_x: *mut c_float,
928        d_y: *mut c_float,
929    ) -> c_float;
930    pub fn graphene_point_equal(a: *const graphene_point_t, b: *const graphene_point_t) -> bool;
931    pub fn graphene_point_free(p: *mut graphene_point_t);
932    pub fn graphene_point_init(
933        p: *mut graphene_point_t,
934        x: c_float,
935        y: c_float,
936    ) -> *mut graphene_point_t;
937    pub fn graphene_point_init_from_point(
938        p: *mut graphene_point_t,
939        src: *const graphene_point_t,
940    ) -> *mut graphene_point_t;
941    pub fn graphene_point_init_from_vec2(
942        p: *mut graphene_point_t,
943        src: *const graphene_vec2_t,
944    ) -> *mut graphene_point_t;
945    pub fn graphene_point_interpolate(
946        a: *const graphene_point_t,
947        b: *const graphene_point_t,
948        factor: c_double,
949        res: *mut graphene_point_t,
950    );
951    pub fn graphene_point_near(
952        a: *const graphene_point_t,
953        b: *const graphene_point_t,
954        epsilon: c_float,
955    ) -> bool;
956    pub fn graphene_point_to_vec2(p: *const graphene_point_t, v: *mut graphene_vec2_t);
957    pub fn graphene_point_zero() -> *const graphene_point_t;
958
959    //=========================================================================
960    // graphene_quad_t
961    //=========================================================================
962    pub fn graphene_quad_get_type() -> GType;
963    pub fn graphene_quad_alloc() -> *mut graphene_quad_t;
964    pub fn graphene_quad_bounds(q: *const graphene_quad_t, r: *mut graphene_rect_t);
965    pub fn graphene_quad_contains(q: *const graphene_quad_t, p: *const graphene_point_t) -> bool;
966    pub fn graphene_quad_free(q: *mut graphene_quad_t);
967    pub fn graphene_quad_get_point(
968        q: *const graphene_quad_t,
969        index_: c_uint,
970    ) -> *const graphene_point_t;
971    pub fn graphene_quad_init(
972        q: *mut graphene_quad_t,
973        p1: *const graphene_point_t,
974        p2: *const graphene_point_t,
975        p3: *const graphene_point_t,
976        p4: *const graphene_point_t,
977    ) -> *mut graphene_quad_t;
978    pub fn graphene_quad_init_from_points(
979        q: *mut graphene_quad_t,
980        points: *const [graphene_point_t; 4],
981    ) -> *mut graphene_quad_t;
982    pub fn graphene_quad_init_from_rect(
983        q: *mut graphene_quad_t,
984        r: *const graphene_rect_t,
985    ) -> *mut graphene_quad_t;
986
987    //=========================================================================
988    // graphene_quaternion_t
989    //=========================================================================
990    pub fn graphene_quaternion_get_type() -> GType;
991    pub fn graphene_quaternion_alloc() -> *mut graphene_quaternion_t;
992    pub fn graphene_quaternion_add(
993        a: *const graphene_quaternion_t,
994        b: *const graphene_quaternion_t,
995        res: *mut graphene_quaternion_t,
996    );
997    pub fn graphene_quaternion_dot(
998        a: *const graphene_quaternion_t,
999        b: *const graphene_quaternion_t,
1000    ) -> c_float;
1001    pub fn graphene_quaternion_equal(
1002        a: *const graphene_quaternion_t,
1003        b: *const graphene_quaternion_t,
1004    ) -> bool;
1005    pub fn graphene_quaternion_free(q: *mut graphene_quaternion_t);
1006    pub fn graphene_quaternion_init(
1007        q: *mut graphene_quaternion_t,
1008        x: c_float,
1009        y: c_float,
1010        z: c_float,
1011        w: c_float,
1012    ) -> *mut graphene_quaternion_t;
1013    pub fn graphene_quaternion_init_from_angle_vec3(
1014        q: *mut graphene_quaternion_t,
1015        angle: c_float,
1016        axis: *const graphene_vec3_t,
1017    ) -> *mut graphene_quaternion_t;
1018    pub fn graphene_quaternion_init_from_angles(
1019        q: *mut graphene_quaternion_t,
1020        deg_x: c_float,
1021        deg_y: c_float,
1022        deg_z: c_float,
1023    ) -> *mut graphene_quaternion_t;
1024    pub fn graphene_quaternion_init_from_euler(
1025        q: *mut graphene_quaternion_t,
1026        e: *const graphene_euler_t,
1027    ) -> *mut graphene_quaternion_t;
1028    pub fn graphene_quaternion_init_from_matrix(
1029        q: *mut graphene_quaternion_t,
1030        m: *const graphene_matrix_t,
1031    ) -> *mut graphene_quaternion_t;
1032    pub fn graphene_quaternion_init_from_quaternion(
1033        q: *mut graphene_quaternion_t,
1034        src: *const graphene_quaternion_t,
1035    ) -> *mut graphene_quaternion_t;
1036    pub fn graphene_quaternion_init_from_radians(
1037        q: *mut graphene_quaternion_t,
1038        rad_x: c_float,
1039        rad_y: c_float,
1040        rad_z: c_float,
1041    ) -> *mut graphene_quaternion_t;
1042    pub fn graphene_quaternion_init_from_vec4(
1043        q: *mut graphene_quaternion_t,
1044        src: *const graphene_vec4_t,
1045    ) -> *mut graphene_quaternion_t;
1046    pub fn graphene_quaternion_init_identity(
1047        q: *mut graphene_quaternion_t,
1048    ) -> *mut graphene_quaternion_t;
1049    pub fn graphene_quaternion_invert(
1050        q: *const graphene_quaternion_t,
1051        res: *mut graphene_quaternion_t,
1052    );
1053    pub fn graphene_quaternion_multiply(
1054        a: *const graphene_quaternion_t,
1055        b: *const graphene_quaternion_t,
1056        res: *mut graphene_quaternion_t,
1057    );
1058    pub fn graphene_quaternion_normalize(
1059        q: *const graphene_quaternion_t,
1060        res: *mut graphene_quaternion_t,
1061    );
1062    pub fn graphene_quaternion_scale(
1063        q: *const graphene_quaternion_t,
1064        factor: c_float,
1065        res: *mut graphene_quaternion_t,
1066    );
1067    pub fn graphene_quaternion_slerp(
1068        a: *const graphene_quaternion_t,
1069        b: *const graphene_quaternion_t,
1070        factor: c_float,
1071        res: *mut graphene_quaternion_t,
1072    );
1073    pub fn graphene_quaternion_to_angle_vec3(
1074        q: *const graphene_quaternion_t,
1075        angle: *mut c_float,
1076        axis: *mut graphene_vec3_t,
1077    );
1078    pub fn graphene_quaternion_to_angles(
1079        q: *const graphene_quaternion_t,
1080        deg_x: *mut c_float,
1081        deg_y: *mut c_float,
1082        deg_z: *mut c_float,
1083    );
1084    pub fn graphene_quaternion_to_matrix(
1085        q: *const graphene_quaternion_t,
1086        m: *mut graphene_matrix_t,
1087    );
1088    pub fn graphene_quaternion_to_radians(
1089        q: *const graphene_quaternion_t,
1090        rad_x: *mut c_float,
1091        rad_y: *mut c_float,
1092        rad_z: *mut c_float,
1093    );
1094    pub fn graphene_quaternion_to_vec4(q: *const graphene_quaternion_t, res: *mut graphene_vec4_t);
1095
1096    //=========================================================================
1097    // graphene_ray_t
1098    //=========================================================================
1099    pub fn graphene_ray_get_type() -> GType;
1100    pub fn graphene_ray_alloc() -> *mut graphene_ray_t;
1101    pub fn graphene_ray_equal(a: *const graphene_ray_t, b: *const graphene_ray_t) -> bool;
1102    pub fn graphene_ray_free(r: *mut graphene_ray_t);
1103    pub fn graphene_ray_get_closest_point_to_point(
1104        r: *const graphene_ray_t,
1105        p: *const graphene_point3d_t,
1106        res: *mut graphene_point3d_t,
1107    );
1108    pub fn graphene_ray_get_direction(r: *const graphene_ray_t, direction: *mut graphene_vec3_t);
1109    pub fn graphene_ray_get_distance_to_plane(
1110        r: *const graphene_ray_t,
1111        p: *const graphene_plane_t,
1112    ) -> c_float;
1113    pub fn graphene_ray_get_distance_to_point(
1114        r: *const graphene_ray_t,
1115        p: *const graphene_point3d_t,
1116    ) -> c_float;
1117    pub fn graphene_ray_get_origin(r: *const graphene_ray_t, origin: *mut graphene_point3d_t);
1118    pub fn graphene_ray_get_position_at(
1119        r: *const graphene_ray_t,
1120        t: c_float,
1121        position: *mut graphene_point3d_t,
1122    );
1123    pub fn graphene_ray_init(
1124        r: *mut graphene_ray_t,
1125        origin: *const graphene_point3d_t,
1126        direction: *const graphene_vec3_t,
1127    ) -> *mut graphene_ray_t;
1128    pub fn graphene_ray_init_from_ray(
1129        r: *mut graphene_ray_t,
1130        src: *const graphene_ray_t,
1131    ) -> *mut graphene_ray_t;
1132    pub fn graphene_ray_init_from_vec3(
1133        r: *mut graphene_ray_t,
1134        origin: *const graphene_vec3_t,
1135        direction: *const graphene_vec3_t,
1136    ) -> *mut graphene_ray_t;
1137    pub fn graphene_ray_intersect_box(
1138        r: *const graphene_ray_t,
1139        b: *const graphene_box_t,
1140        t_out: *mut c_float,
1141    ) -> graphene_ray_intersection_kind_t;
1142    pub fn graphene_ray_intersect_sphere(
1143        r: *const graphene_ray_t,
1144        s: *const graphene_sphere_t,
1145        t_out: *mut c_float,
1146    ) -> graphene_ray_intersection_kind_t;
1147    pub fn graphene_ray_intersect_triangle(
1148        r: *const graphene_ray_t,
1149        t: *const graphene_triangle_t,
1150        t_out: *mut c_float,
1151    ) -> graphene_ray_intersection_kind_t;
1152    pub fn graphene_ray_intersects_box(r: *const graphene_ray_t, b: *const graphene_box_t) -> bool;
1153    pub fn graphene_ray_intersects_sphere(
1154        r: *const graphene_ray_t,
1155        s: *const graphene_sphere_t,
1156    ) -> bool;
1157    pub fn graphene_ray_intersects_triangle(
1158        r: *const graphene_ray_t,
1159        t: *const graphene_triangle_t,
1160    ) -> bool;
1161
1162    //=========================================================================
1163    // graphene_rect_t
1164    //=========================================================================
1165    pub fn graphene_rect_get_type() -> GType;
1166    pub fn graphene_rect_contains_point(
1167        r: *const graphene_rect_t,
1168        p: *const graphene_point_t,
1169    ) -> bool;
1170    pub fn graphene_rect_contains_rect(
1171        a: *const graphene_rect_t,
1172        b: *const graphene_rect_t,
1173    ) -> bool;
1174    pub fn graphene_rect_equal(a: *const graphene_rect_t, b: *const graphene_rect_t) -> bool;
1175    pub fn graphene_rect_expand(
1176        r: *const graphene_rect_t,
1177        p: *const graphene_point_t,
1178        res: *mut graphene_rect_t,
1179    );
1180    pub fn graphene_rect_free(r: *mut graphene_rect_t);
1181    pub fn graphene_rect_get_area(r: *const graphene_rect_t) -> c_float;
1182    pub fn graphene_rect_get_bottom_left(r: *const graphene_rect_t, p: *mut graphene_point_t);
1183    pub fn graphene_rect_get_bottom_right(r: *const graphene_rect_t, p: *mut graphene_point_t);
1184    pub fn graphene_rect_get_center(r: *const graphene_rect_t, p: *mut graphene_point_t);
1185    pub fn graphene_rect_get_height(r: *const graphene_rect_t) -> c_float;
1186    pub fn graphene_rect_get_top_left(r: *const graphene_rect_t, p: *mut graphene_point_t);
1187    pub fn graphene_rect_get_top_right(r: *const graphene_rect_t, p: *mut graphene_point_t);
1188    pub fn graphene_rect_get_vertices(
1189        r: *const graphene_rect_t,
1190        vertices: *mut [graphene_vec2_t; 4],
1191    );
1192    pub fn graphene_rect_get_width(r: *const graphene_rect_t) -> c_float;
1193    pub fn graphene_rect_get_x(r: *const graphene_rect_t) -> c_float;
1194    pub fn graphene_rect_get_y(r: *const graphene_rect_t) -> c_float;
1195    pub fn graphene_rect_init(
1196        r: *mut graphene_rect_t,
1197        x: c_float,
1198        y: c_float,
1199        width: c_float,
1200        height: c_float,
1201    ) -> *mut graphene_rect_t;
1202    pub fn graphene_rect_init_from_rect(
1203        r: *mut graphene_rect_t,
1204        src: *const graphene_rect_t,
1205    ) -> *mut graphene_rect_t;
1206    pub fn graphene_rect_inset(
1207        r: *mut graphene_rect_t,
1208        d_x: c_float,
1209        d_y: c_float,
1210    ) -> *mut graphene_rect_t;
1211    pub fn graphene_rect_inset_r(
1212        r: *const graphene_rect_t,
1213        d_x: c_float,
1214        d_y: c_float,
1215        res: *mut graphene_rect_t,
1216    );
1217    pub fn graphene_rect_interpolate(
1218        a: *const graphene_rect_t,
1219        b: *const graphene_rect_t,
1220        factor: c_double,
1221        res: *mut graphene_rect_t,
1222    );
1223    pub fn graphene_rect_intersection(
1224        a: *const graphene_rect_t,
1225        b: *const graphene_rect_t,
1226        res: *mut graphene_rect_t,
1227    ) -> bool;
1228    pub fn graphene_rect_normalize(r: *mut graphene_rect_t) -> *mut graphene_rect_t;
1229    pub fn graphene_rect_normalize_r(r: *const graphene_rect_t, res: *mut graphene_rect_t);
1230    pub fn graphene_rect_offset(
1231        r: *mut graphene_rect_t,
1232        d_x: c_float,
1233        d_y: c_float,
1234    ) -> *mut graphene_rect_t;
1235    pub fn graphene_rect_offset_r(
1236        r: *const graphene_rect_t,
1237        d_x: c_float,
1238        d_y: c_float,
1239        res: *mut graphene_rect_t,
1240    );
1241    pub fn graphene_rect_round(r: *const graphene_rect_t, res: *mut graphene_rect_t);
1242    pub fn graphene_rect_round_extents(r: *const graphene_rect_t, res: *mut graphene_rect_t);
1243    pub fn graphene_rect_round_to_pixel(r: *mut graphene_rect_t) -> *mut graphene_rect_t;
1244    pub fn graphene_rect_scale(
1245        r: *const graphene_rect_t,
1246        s_h: c_float,
1247        s_v: c_float,
1248        res: *mut graphene_rect_t,
1249    );
1250    pub fn graphene_rect_union(
1251        a: *const graphene_rect_t,
1252        b: *const graphene_rect_t,
1253        res: *mut graphene_rect_t,
1254    );
1255    pub fn graphene_rect_alloc() -> *mut graphene_rect_t;
1256    pub fn graphene_rect_zero() -> *const graphene_rect_t;
1257
1258    //=========================================================================
1259    // graphene_size_t
1260    //=========================================================================
1261    pub fn graphene_size_get_type() -> GType;
1262    pub fn graphene_size_alloc() -> *mut graphene_size_t;
1263    pub fn graphene_size_equal(a: *const graphene_size_t, b: *const graphene_size_t) -> bool;
1264    pub fn graphene_size_free(s: *mut graphene_size_t);
1265    pub fn graphene_size_init(
1266        s: *mut graphene_size_t,
1267        width: c_float,
1268        height: c_float,
1269    ) -> *mut graphene_size_t;
1270    pub fn graphene_size_init_from_size(
1271        s: *mut graphene_size_t,
1272        src: *const graphene_size_t,
1273    ) -> *mut graphene_size_t;
1274    pub fn graphene_size_interpolate(
1275        a: *const graphene_size_t,
1276        b: *const graphene_size_t,
1277        factor: c_double,
1278        res: *mut graphene_size_t,
1279    );
1280    pub fn graphene_size_scale(
1281        s: *const graphene_size_t,
1282        factor: c_float,
1283        res: *mut graphene_size_t,
1284    );
1285    pub fn graphene_size_zero() -> *const graphene_size_t;
1286
1287    //=========================================================================
1288    // graphene_sphere_t
1289    //=========================================================================
1290    pub fn graphene_sphere_get_type() -> GType;
1291    pub fn graphene_sphere_alloc() -> *mut graphene_sphere_t;
1292    pub fn graphene_sphere_contains_point(
1293        s: *const graphene_sphere_t,
1294        point: *const graphene_point3d_t,
1295    ) -> bool;
1296    pub fn graphene_sphere_distance(
1297        s: *const graphene_sphere_t,
1298        point: *const graphene_point3d_t,
1299    ) -> c_float;
1300    pub fn graphene_sphere_equal(a: *const graphene_sphere_t, b: *const graphene_sphere_t) -> bool;
1301    pub fn graphene_sphere_free(s: *mut graphene_sphere_t);
1302    pub fn graphene_sphere_get_bounding_box(s: *const graphene_sphere_t, box_: *mut graphene_box_t);
1303    pub fn graphene_sphere_get_center(s: *const graphene_sphere_t, center: *mut graphene_point3d_t);
1304    pub fn graphene_sphere_get_radius(s: *const graphene_sphere_t) -> c_float;
1305    pub fn graphene_sphere_init(
1306        s: *mut graphene_sphere_t,
1307        center: *const graphene_point3d_t,
1308        radius: c_float,
1309    ) -> *mut graphene_sphere_t;
1310    pub fn graphene_sphere_init_from_points(
1311        s: *mut graphene_sphere_t,
1312        n_points: c_uint,
1313        points: *const graphene_point3d_t,
1314        center: *const graphene_point3d_t,
1315    ) -> *mut graphene_sphere_t;
1316    pub fn graphene_sphere_init_from_vectors(
1317        s: *mut graphene_sphere_t,
1318        n_vectors: c_uint,
1319        vectors: *const graphene_vec3_t,
1320        center: *const graphene_point3d_t,
1321    ) -> *mut graphene_sphere_t;
1322    pub fn graphene_sphere_is_empty(s: *const graphene_sphere_t) -> bool;
1323    pub fn graphene_sphere_translate(
1324        s: *const graphene_sphere_t,
1325        point: *const graphene_point3d_t,
1326        res: *mut graphene_sphere_t,
1327    );
1328
1329    //=========================================================================
1330    // graphene_triangle_t
1331    //=========================================================================
1332    pub fn graphene_triangle_get_type() -> GType;
1333    pub fn graphene_triangle_alloc() -> *mut graphene_triangle_t;
1334    pub fn graphene_triangle_contains_point(
1335        t: *const graphene_triangle_t,
1336        p: *const graphene_point3d_t,
1337    ) -> bool;
1338    pub fn graphene_triangle_equal(
1339        a: *const graphene_triangle_t,
1340        b: *const graphene_triangle_t,
1341    ) -> bool;
1342    pub fn graphene_triangle_free(t: *mut graphene_triangle_t);
1343    pub fn graphene_triangle_get_area(t: *const graphene_triangle_t) -> c_float;
1344    pub fn graphene_triangle_get_barycoords(
1345        t: *const graphene_triangle_t,
1346        p: *const graphene_point3d_t,
1347        res: *mut graphene_vec2_t,
1348    ) -> bool;
1349    pub fn graphene_triangle_get_bounding_box(
1350        t: *const graphene_triangle_t,
1351        res: *mut graphene_box_t,
1352    );
1353    pub fn graphene_triangle_get_midpoint(
1354        t: *const graphene_triangle_t,
1355        res: *mut graphene_point3d_t,
1356    );
1357    pub fn graphene_triangle_get_normal(t: *const graphene_triangle_t, res: *mut graphene_vec3_t);
1358    pub fn graphene_triangle_get_plane(t: *const graphene_triangle_t, res: *mut graphene_plane_t);
1359    pub fn graphene_triangle_get_points(
1360        t: *const graphene_triangle_t,
1361        a: *mut graphene_point3d_t,
1362        b: *mut graphene_point3d_t,
1363        c: *mut graphene_point3d_t,
1364    );
1365    pub fn graphene_triangle_get_uv(
1366        t: *const graphene_triangle_t,
1367        p: *const graphene_point3d_t,
1368        uv_a: *const graphene_vec2_t,
1369        uv_b: *const graphene_vec2_t,
1370        uv_c: *const graphene_vec2_t,
1371        res: *mut graphene_vec2_t,
1372    ) -> bool;
1373    pub fn graphene_triangle_get_vertices(
1374        t: *const graphene_triangle_t,
1375        a: *mut graphene_vec3_t,
1376        b: *mut graphene_vec3_t,
1377        c: *mut graphene_vec3_t,
1378    );
1379    pub fn graphene_triangle_init_from_float(
1380        t: *mut graphene_triangle_t,
1381        a: *const [c_float; 3],
1382        b: *const [c_float; 3],
1383        c: *const [c_float; 3],
1384    ) -> *mut graphene_triangle_t;
1385    pub fn graphene_triangle_init_from_point3d(
1386        t: *mut graphene_triangle_t,
1387        a: *const graphene_point3d_t,
1388        b: *const graphene_point3d_t,
1389        c: *const graphene_point3d_t,
1390    ) -> *mut graphene_triangle_t;
1391    pub fn graphene_triangle_init_from_vec3(
1392        t: *mut graphene_triangle_t,
1393        a: *const graphene_vec3_t,
1394        b: *const graphene_vec3_t,
1395        c: *const graphene_vec3_t,
1396    ) -> *mut graphene_triangle_t;
1397
1398    //=========================================================================
1399    // graphene_vec2_t
1400    //=========================================================================
1401    pub fn graphene_vec2_get_type() -> GType;
1402    pub fn graphene_vec2_alloc() -> *mut graphene_vec2_t;
1403    pub fn graphene_vec2_add(
1404        a: *const graphene_vec2_t,
1405        b: *const graphene_vec2_t,
1406        res: *mut graphene_vec2_t,
1407    );
1408    pub fn graphene_vec2_divide(
1409        a: *const graphene_vec2_t,
1410        b: *const graphene_vec2_t,
1411        res: *mut graphene_vec2_t,
1412    );
1413    pub fn graphene_vec2_dot(a: *const graphene_vec2_t, b: *const graphene_vec2_t) -> c_float;
1414    pub fn graphene_vec2_equal(v1: *const graphene_vec2_t, v2: *const graphene_vec2_t) -> bool;
1415    pub fn graphene_vec2_free(v: *mut graphene_vec2_t);
1416    pub fn graphene_vec2_get_x(v: *const graphene_vec2_t) -> c_float;
1417    pub fn graphene_vec2_get_y(v: *const graphene_vec2_t) -> c_float;
1418    pub fn graphene_vec2_init(
1419        v: *mut graphene_vec2_t,
1420        x: c_float,
1421        y: c_float,
1422    ) -> *mut graphene_vec2_t;
1423    pub fn graphene_vec2_init_from_float(
1424        v: *mut graphene_vec2_t,
1425        src: *const [c_float; 2],
1426    ) -> *mut graphene_vec2_t;
1427    pub fn graphene_vec2_init_from_vec2(
1428        v: *mut graphene_vec2_t,
1429        src: *const graphene_vec2_t,
1430    ) -> *mut graphene_vec2_t;
1431    pub fn graphene_vec2_interpolate(
1432        v1: *const graphene_vec2_t,
1433        v2: *const graphene_vec2_t,
1434        factor: c_double,
1435        res: *mut graphene_vec2_t,
1436    );
1437    pub fn graphene_vec2_length(v: *const graphene_vec2_t) -> c_float;
1438    pub fn graphene_vec2_max(
1439        a: *const graphene_vec2_t,
1440        b: *const graphene_vec2_t,
1441        res: *mut graphene_vec2_t,
1442    );
1443    pub fn graphene_vec2_min(
1444        a: *const graphene_vec2_t,
1445        b: *const graphene_vec2_t,
1446        res: *mut graphene_vec2_t,
1447    );
1448    pub fn graphene_vec2_multiply(
1449        a: *const graphene_vec2_t,
1450        b: *const graphene_vec2_t,
1451        res: *mut graphene_vec2_t,
1452    );
1453    pub fn graphene_vec2_near(
1454        v1: *const graphene_vec2_t,
1455        v2: *const graphene_vec2_t,
1456        epsilon: c_float,
1457    ) -> bool;
1458    pub fn graphene_vec2_negate(v: *const graphene_vec2_t, res: *mut graphene_vec2_t);
1459    pub fn graphene_vec2_normalize(v: *const graphene_vec2_t, res: *mut graphene_vec2_t);
1460    pub fn graphene_vec2_scale(
1461        v: *const graphene_vec2_t,
1462        factor: c_float,
1463        res: *mut graphene_vec2_t,
1464    );
1465    pub fn graphene_vec2_subtract(
1466        a: *const graphene_vec2_t,
1467        b: *const graphene_vec2_t,
1468        res: *mut graphene_vec2_t,
1469    );
1470    pub fn graphene_vec2_to_float(v: *const graphene_vec2_t, dest: *mut [c_float; 2]);
1471    pub fn graphene_vec2_one() -> *const graphene_vec2_t;
1472    pub fn graphene_vec2_x_axis() -> *const graphene_vec2_t;
1473    pub fn graphene_vec2_y_axis() -> *const graphene_vec2_t;
1474    pub fn graphene_vec2_zero() -> *const graphene_vec2_t;
1475
1476    //=========================================================================
1477    // graphene_vec3_t
1478    //=========================================================================
1479    pub fn graphene_vec3_get_type() -> GType;
1480    pub fn graphene_vec3_alloc() -> *mut graphene_vec3_t;
1481    pub fn graphene_vec3_add(
1482        a: *const graphene_vec3_t,
1483        b: *const graphene_vec3_t,
1484        res: *mut graphene_vec3_t,
1485    );
1486    pub fn graphene_vec3_cross(
1487        a: *const graphene_vec3_t,
1488        b: *const graphene_vec3_t,
1489        res: *mut graphene_vec3_t,
1490    );
1491    pub fn graphene_vec3_divide(
1492        a: *const graphene_vec3_t,
1493        b: *const graphene_vec3_t,
1494        res: *mut graphene_vec3_t,
1495    );
1496    pub fn graphene_vec3_dot(a: *const graphene_vec3_t, b: *const graphene_vec3_t) -> c_float;
1497    pub fn graphene_vec3_equal(v1: *const graphene_vec3_t, v2: *const graphene_vec3_t) -> bool;
1498    pub fn graphene_vec3_free(v: *mut graphene_vec3_t);
1499    pub fn graphene_vec3_get_x(v: *const graphene_vec3_t) -> c_float;
1500    pub fn graphene_vec3_get_xy(v: *const graphene_vec3_t, res: *mut graphene_vec2_t);
1501    pub fn graphene_vec3_get_xy0(v: *const graphene_vec3_t, res: *mut graphene_vec3_t);
1502    pub fn graphene_vec3_get_xyz0(v: *const graphene_vec3_t, res: *mut graphene_vec4_t);
1503    pub fn graphene_vec3_get_xyz1(v: *const graphene_vec3_t, res: *mut graphene_vec4_t);
1504    pub fn graphene_vec3_get_xyzw(v: *const graphene_vec3_t, w: c_float, res: *mut graphene_vec4_t);
1505    pub fn graphene_vec3_get_y(v: *const graphene_vec3_t) -> c_float;
1506    pub fn graphene_vec3_get_z(v: *const graphene_vec3_t) -> c_float;
1507    pub fn graphene_vec3_init(
1508        v: *mut graphene_vec3_t,
1509        x: c_float,
1510        y: c_float,
1511        z: c_float,
1512    ) -> *mut graphene_vec3_t;
1513    pub fn graphene_vec3_init_from_float(
1514        v: *mut graphene_vec3_t,
1515        src: *const [c_float; 3],
1516    ) -> *mut graphene_vec3_t;
1517    pub fn graphene_vec3_init_from_vec3(
1518        v: *mut graphene_vec3_t,
1519        src: *const graphene_vec3_t,
1520    ) -> *mut graphene_vec3_t;
1521    pub fn graphene_vec3_interpolate(
1522        v1: *const graphene_vec3_t,
1523        v2: *const graphene_vec3_t,
1524        factor: c_double,
1525        res: *mut graphene_vec3_t,
1526    );
1527    pub fn graphene_vec3_length(v: *const graphene_vec3_t) -> c_float;
1528    pub fn graphene_vec3_max(
1529        a: *const graphene_vec3_t,
1530        b: *const graphene_vec3_t,
1531        res: *mut graphene_vec3_t,
1532    );
1533    pub fn graphene_vec3_min(
1534        a: *const graphene_vec3_t,
1535        b: *const graphene_vec3_t,
1536        res: *mut graphene_vec3_t,
1537    );
1538    pub fn graphene_vec3_multiply(
1539        a: *const graphene_vec3_t,
1540        b: *const graphene_vec3_t,
1541        res: *mut graphene_vec3_t,
1542    );
1543    pub fn graphene_vec3_near(
1544        v1: *const graphene_vec3_t,
1545        v2: *const graphene_vec3_t,
1546        epsilon: c_float,
1547    ) -> bool;
1548    pub fn graphene_vec3_negate(v: *const graphene_vec3_t, res: *mut graphene_vec3_t);
1549    pub fn graphene_vec3_normalize(v: *const graphene_vec3_t, res: *mut graphene_vec3_t);
1550    pub fn graphene_vec3_scale(
1551        v: *const graphene_vec3_t,
1552        factor: c_float,
1553        res: *mut graphene_vec3_t,
1554    );
1555    pub fn graphene_vec3_subtract(
1556        a: *const graphene_vec3_t,
1557        b: *const graphene_vec3_t,
1558        res: *mut graphene_vec3_t,
1559    );
1560    pub fn graphene_vec3_to_float(v: *const graphene_vec3_t, dest: *mut [c_float; 3]);
1561    pub fn graphene_vec3_one() -> *const graphene_vec3_t;
1562    pub fn graphene_vec3_x_axis() -> *const graphene_vec3_t;
1563    pub fn graphene_vec3_y_axis() -> *const graphene_vec3_t;
1564    pub fn graphene_vec3_z_axis() -> *const graphene_vec3_t;
1565    pub fn graphene_vec3_zero() -> *const graphene_vec3_t;
1566
1567    //=========================================================================
1568    // graphene_vec4_t
1569    //=========================================================================
1570    pub fn graphene_vec4_get_type() -> GType;
1571    pub fn graphene_vec4_alloc() -> *mut graphene_vec4_t;
1572    pub fn graphene_vec4_add(
1573        a: *const graphene_vec4_t,
1574        b: *const graphene_vec4_t,
1575        res: *mut graphene_vec4_t,
1576    );
1577    pub fn graphene_vec4_divide(
1578        a: *const graphene_vec4_t,
1579        b: *const graphene_vec4_t,
1580        res: *mut graphene_vec4_t,
1581    );
1582    pub fn graphene_vec4_dot(a: *const graphene_vec4_t, b: *const graphene_vec4_t) -> c_float;
1583    pub fn graphene_vec4_equal(v1: *const graphene_vec4_t, v2: *const graphene_vec4_t) -> bool;
1584    pub fn graphene_vec4_free(v: *mut graphene_vec4_t);
1585    pub fn graphene_vec4_get_w(v: *const graphene_vec4_t) -> c_float;
1586    pub fn graphene_vec4_get_x(v: *const graphene_vec4_t) -> c_float;
1587    pub fn graphene_vec4_get_xy(v: *const graphene_vec4_t, res: *mut graphene_vec2_t);
1588    pub fn graphene_vec4_get_xyz(v: *const graphene_vec4_t, res: *mut graphene_vec3_t);
1589    pub fn graphene_vec4_get_y(v: *const graphene_vec4_t) -> c_float;
1590    pub fn graphene_vec4_get_z(v: *const graphene_vec4_t) -> c_float;
1591    pub fn graphene_vec4_init(
1592        v: *mut graphene_vec4_t,
1593        x: c_float,
1594        y: c_float,
1595        z: c_float,
1596        w: c_float,
1597    ) -> *mut graphene_vec4_t;
1598    pub fn graphene_vec4_init_from_float(
1599        v: *mut graphene_vec4_t,
1600        src: *const [c_float; 4],
1601    ) -> *mut graphene_vec4_t;
1602    pub fn graphene_vec4_init_from_vec2(
1603        v: *mut graphene_vec4_t,
1604        src: *const graphene_vec2_t,
1605        z: c_float,
1606        w: c_float,
1607    ) -> *mut graphene_vec4_t;
1608    pub fn graphene_vec4_init_from_vec3(
1609        v: *mut graphene_vec4_t,
1610        src: *const graphene_vec3_t,
1611        w: c_float,
1612    ) -> *mut graphene_vec4_t;
1613    pub fn graphene_vec4_init_from_vec4(
1614        v: *mut graphene_vec4_t,
1615        src: *const graphene_vec4_t,
1616    ) -> *mut graphene_vec4_t;
1617    pub fn graphene_vec4_interpolate(
1618        v1: *const graphene_vec4_t,
1619        v2: *const graphene_vec4_t,
1620        factor: c_double,
1621        res: *mut graphene_vec4_t,
1622    );
1623    pub fn graphene_vec4_length(v: *const graphene_vec4_t) -> c_float;
1624    pub fn graphene_vec4_max(
1625        a: *const graphene_vec4_t,
1626        b: *const graphene_vec4_t,
1627        res: *mut graphene_vec4_t,
1628    );
1629    pub fn graphene_vec4_min(
1630        a: *const graphene_vec4_t,
1631        b: *const graphene_vec4_t,
1632        res: *mut graphene_vec4_t,
1633    );
1634    pub fn graphene_vec4_multiply(
1635        a: *const graphene_vec4_t,
1636        b: *const graphene_vec4_t,
1637        res: *mut graphene_vec4_t,
1638    );
1639    pub fn graphene_vec4_near(
1640        v1: *const graphene_vec4_t,
1641        v2: *const graphene_vec4_t,
1642        epsilon: c_float,
1643    ) -> bool;
1644    pub fn graphene_vec4_negate(v: *const graphene_vec4_t, res: *mut graphene_vec4_t);
1645    pub fn graphene_vec4_normalize(v: *const graphene_vec4_t, res: *mut graphene_vec4_t);
1646    pub fn graphene_vec4_scale(
1647        v: *const graphene_vec4_t,
1648        factor: c_float,
1649        res: *mut graphene_vec4_t,
1650    );
1651    pub fn graphene_vec4_subtract(
1652        a: *const graphene_vec4_t,
1653        b: *const graphene_vec4_t,
1654        res: *mut graphene_vec4_t,
1655    );
1656    pub fn graphene_vec4_to_float(v: *const graphene_vec4_t, dest: *mut [c_float; 4]);
1657    pub fn graphene_vec4_one() -> *const graphene_vec4_t;
1658    pub fn graphene_vec4_w_axis() -> *const graphene_vec4_t;
1659    pub fn graphene_vec4_x_axis() -> *const graphene_vec4_t;
1660    pub fn graphene_vec4_y_axis() -> *const graphene_vec4_t;
1661    pub fn graphene_vec4_z_axis() -> *const graphene_vec4_t;
1662    pub fn graphene_vec4_zero() -> *const graphene_vec4_t;
1663
1664}