surfman/platform/generic/egl/
ffi.rs1#![allow(dead_code)]
6
7use crate::egl::types::{EGLAttrib, EGLBoolean, EGLContext, EGLDeviceEXT, EGLDisplay, EGLSurface};
8use crate::egl::types::{EGLenum, EGLint};
9
10use std::os::raw::c_void;
11use std::sync::LazyLock;
12
13pub enum EGLClientBufferOpaque {}
14pub type EGLClientBuffer = *mut EGLClientBufferOpaque;
15
16pub enum EGLImageKHROpaque {}
17pub type EGLImageKHR = *mut EGLImageKHROpaque;
18
19pub const EGL_GL_TEXTURE_2D_KHR: EGLenum = 0x30b1;
20pub const EGL_IMAGE_PRESERVED_KHR: EGLenum = 0x30d2;
21pub const EGL_CONTEXT_MINOR_VERSION_KHR: EGLenum = 0x30fb;
22pub const EGL_CONTEXT_OPENGL_PROFILE_MASK: EGLenum = 0x30fd;
23pub const EGL_PLATFORM_DEVICE_EXT: EGLenum = 0x313f;
24pub const EGL_NATIVE_BUFFER_ANDROID: EGLenum = 0x3140;
25pub const EGL_PLATFORM_X11_KHR: EGLenum = 0x31d5;
26pub const EGL_PLATFORM_WAYLAND_KHR: EGLenum = 0x31d8;
27pub const EGL_PLATFORM_SURFACELESS_MESA: EGLenum = 0x31dd;
28pub const EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE: EGLenum = 0x3200;
29pub const EGL_BAD_DEVICE_EXT: EGLenum = 0x322b;
30pub const EGL_DEVICE_EXT: EGLenum = 0x322c;
31pub const EGL_D3D11_DEVICE_ANGLE: EGLenum = 0x33a1;
32pub const EGL_DXGI_KEYED_MUTEX_ANGLE: EGLenum = 0x33a2;
33pub const EGL_D3D_TEXTURE_ANGLE: EGLenum = 0x33a3;
34
35pub const EGL_NO_DEVICE_EXT: EGLDeviceEXT = 0 as EGLDeviceEXT;
36pub const EGL_NO_IMAGE_KHR: EGLImageKHR = 0 as EGLImageKHR;
37
38pub const EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT: EGLint = 1;
39pub const EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT: EGLint = 2;
40
41#[allow(non_snake_case)]
42pub(crate) struct EGLExtensionFunctions {
43 pub(crate) CreateImageKHR: extern "C" fn(
45 dpy: EGLDisplay,
46 ctx: EGLContext,
47 target: EGLenum,
48 buffer: EGLClientBuffer,
49 attrib_list: *const EGLint,
50 ) -> EGLImageKHR,
51 pub(crate) DestroyImageKHR: extern "C" fn(dpy: EGLDisplay, image: EGLImageKHR) -> EGLBoolean,
52 pub(crate) ImageTargetTexture2DOES: extern "C" fn(target: EGLenum, image: EGLImageKHR),
53
54 pub(crate) CreateDeviceANGLE: Option<
56 extern "C" fn(
57 device_type: EGLint,
58 native_device: *mut c_void,
59 attrib_list: *const EGLAttrib,
60 ) -> EGLDeviceEXT,
61 >,
62 pub(crate) GetNativeClientBufferANDROID:
63 Option<extern "C" fn(buffer: *const c_void) -> EGLClientBuffer>,
64 pub(crate) QueryDeviceAttribEXT: Option<
65 extern "C" fn(device: EGLDeviceEXT, attribute: EGLint, value: *mut EGLAttrib) -> EGLBoolean,
66 >,
67 pub(crate) QueryDisplayAttribEXT: Option<
68 extern "C" fn(dpy: EGLDisplay, attribute: EGLint, value: *mut EGLAttrib) -> EGLBoolean,
69 >,
70 pub(crate) QuerySurfacePointerANGLE: Option<
71 extern "C" fn(
72 dpy: EGLDisplay,
73 surface: EGLSurface,
74 attribute: EGLint,
75 value: *mut *mut c_void,
76 ) -> EGLBoolean,
77 >,
78}
79
80pub(crate) static EGL_EXTENSION_FUNCTIONS: LazyLock<EGLExtensionFunctions> = LazyLock::new(|| {
81 use crate::platform::generic::egl::device::lookup_egl_extension as get;
82 use std::mem::transmute as cast;
83 unsafe {
84 EGLExtensionFunctions {
85 CreateImageKHR: cast(get(c"eglCreateImageKHR")),
86 DestroyImageKHR: cast(get(c"eglDestroyImageKHR")),
87 ImageTargetTexture2DOES: cast(get(c"glEGLImageTargetTexture2DOES")),
88
89 CreateDeviceANGLE: cast(get(c"eglCreateDeviceANGLE")),
90 GetNativeClientBufferANDROID: cast(get(c"eglGetNativeClientBufferANDROID")),
91 QueryDeviceAttribEXT: cast(get(c"eglQueryDeviceAttribEXT")),
92 QueryDisplayAttribEXT: cast(get(c"eglQueryDisplayAttribEXT")),
93 QuerySurfacePointerANGLE: cast(get(c"eglQuerySurfacePointerANGLE")),
94 }
95 }
96});