From ff604a53c2646252188a641771fb6e73e6538293 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Sun, 18 Oct 2026 01:01:13 -0400 Subject: Convert X11 pixmaps to textures --- crates/teleia/src/net/texture.rs | 12 ++++++++++++ crates/teleia/src/net/texture/ffi/egl.rs | 2 ++ crates/teleia/src/texture.rs | 1 + 3 files changed, 15 insertions(+) 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 +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, -- cgit v1.3.1