diff options
| author | LLLL Colonq <llll@colonq> | 2026-10-18 01:01:13 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-10-18 01:02:39 -0400 |
| commit | ff604a53c2646252188a641771fb6e73e6538293 (patch) | |
| tree | e5eceb26ea3f4f2d85894d9adf97da538800efa3 /crates | |
| parent | 5790153a16cccae1faa8f3cc07defabefc018d3d (diff) | |
Convert X11 pixmaps to textures
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/teleia/src/net/texture.rs | 12 | ||||
| -rw-r--r-- | crates/teleia/src/net/texture/ffi/egl.rs | 2 | ||||
| -rw-r--r-- | crates/teleia/src/texture.rs | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/crates/teleia/src/net/texture.rs b/crates/teleia/src/net/texture.rs index 86d6988..9aaae00 100644 --- a/crates/teleia/src/net/texture.rs +++ b/crates/teleia/src/net/texture.rs @@ -16,6 +16,18 @@ use ffi::glfw; use crate::{context, texture, utils}; +pub fn upload_xcb_pixmap(ctx: &context::Context, t: &mut texture::Texture, pixmap: u32) { + t.bind(ctx); + unsafe { + let d = glfw::glfwGetEGLDisplay(); + let img = egl::eglCreateImage(d, std::ptr::null_mut(), egl::EGL_NATIVE_PIXMAP_KHR, + pixmap as libc::uintptr_t as egl::EGLClientBuffer, + std::ptr::null_mut() + ); + egl::glEGLImageTargetTexStorageEXT(glow::TEXTURE_2D, img, std::ptr::null_mut()) + } +} + #[derive(Debug)] struct ReceivedTexture { fd: i32, diff --git a/crates/teleia/src/net/texture/ffi/egl.rs b/crates/teleia/src/net/texture/ffi/egl.rs index 32c5356..de7f40f 100644 --- a/crates/teleia/src/net/texture/ffi/egl.rs +++ b/crates/teleia/src/net/texture/ffi/egl.rs @@ -5,6 +5,7 @@ pub const EGL_HEIGHT: EGLenum = 0x3056; pub const EGL_GL_TEXTURE_2D: EGLenum = 0x30B1; // from <EGL/eglext.h> +pub const EGL_NATIVE_PIXMAP_KHR: EGLenum = 0x30B0; pub const EGL_LINUX_DMA_BUF_EXT: EGLenum = 0x3270; pub const EGL_LINUX_DRM_FOURCC_EXT: EGLenum = 0x3271; pub const EGL_DMA_BUF_PLANE0_FD_EXT: EGLenum = 0x3272; @@ -51,4 +52,5 @@ unsafe extern "C" { #[link(name = "GL")] unsafe extern "C" { pub fn glEGLImageTargetTexture2DOES(t: u32, img: EGLImage); + pub fn glEGLImageTargetTexStorageEXT(t: u32, img: EGLImage, attribs: *const core::ffi::c_int); } diff --git a/crates/teleia/src/texture.rs b/crates/teleia/src/texture.rs index 95cb914..6eea03d 100644 --- a/crates/teleia/src/texture.rs +++ b/crates/teleia/src/texture.rs @@ -3,6 +3,7 @@ use image::EncodableLayout; use crate::context; +#[derive(Debug)] pub struct Texture { pub tex: glow::Texture, pub width: i32, |
