From d650b3375da345a298f7806162e87e59ea4a43b4 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sun, 22 Oct 2023 17:35:31 +0200 Subject: [PATCH] render: split module into gfx_apis and renderer --- src/backend.rs | 2 +- src/backends/metal.rs | 2 +- src/backends/metal/video.rs | 3 +- src/backends/x.rs | 3 +- src/compositor.rs | 4 +- src/cursor.rs | 3 +- src/format.rs | 2 +- src/{render/renderer => }/gfx_api.rs | 2 +- src/gfx_apis.rs | 1 + src/{render/renderer => }/gfx_apis/gl.rs | 102 +++++++++++++++++- src/{render => gfx_apis/gl}/egl.rs | 6 +- src/{render => gfx_apis/gl}/egl/context.rs | 2 +- src/{render => gfx_apis/gl}/egl/display.rs | 2 +- src/{render => gfx_apis/gl}/egl/image.rs | 2 +- src/{render => gfx_apis/gl}/egl/sys.rs | 2 +- src/{render => gfx_apis/gl}/ext.rs | 4 +- src/{render => gfx_apis/gl}/gl.rs | 0 .../gl}/gl/frame_buffer.rs | 2 +- src/{render => gfx_apis/gl}/gl/program.rs | 2 +- .../gl}/gl/render_buffer.rs | 2 +- src/{render => gfx_apis/gl}/gl/shader.rs | 2 +- src/{render => gfx_apis/gl}/gl/sys.rs | 0 src/{render => gfx_apis/gl}/gl/texture.rs | 4 +- src/{render => gfx_apis/gl}/proc.rs | 0 src/gfx_apis/gl/renderer.rs | 6 ++ .../gl}/renderer/context.rs | 38 +++---- .../gl}/renderer/framebuffer.rs | 17 ++- src/{render => gfx_apis/gl}/renderer/image.rs | 6 +- .../gl}/renderer/texture.rs | 6 +- .../gl}/shaders/fill.frag.glsl | 0 .../gl}/shaders/fill.vert.glsl | 0 .../gl}/shaders/tex-alpha.frag.glsl | 0 .../gl}/shaders/tex-external-alpha.frag.glsl | 0 .../gl}/shaders/tex-external.frag.glsl | 0 .../gl}/shaders/tex.frag.glsl | 0 .../gl}/shaders/tex.vert.glsl | 0 src/ifs/jay_render_ctx.rs | 2 +- src/ifs/jay_screencast.rs | 2 +- src/ifs/wl_buffer.rs | 2 +- src/ifs/wl_drm.rs | 2 +- src/ifs/wl_output.rs | 2 +- src/ifs/wl_surface.rs | 6 +- src/ifs/wl_surface/cursor.rs | 2 +- src/ifs/wl_surface/x_surface/xwindow.rs | 2 +- src/ifs/wl_surface/xdg_surface/xdg_popup.rs | 2 +- .../wl_surface/xdg_surface/xdg_toplevel.rs | 2 +- src/ifs/wl_surface/zwlr_layer_surface_v1.rs | 2 +- src/ifs/zwp_linux_buffer_params_v1.rs | 2 +- src/it/test_backend.rs | 2 +- src/main.rs | 4 +- src/portal/ptl_display.rs | 2 +- src/portal/ptl_render_ctx.rs | 2 +- src/portal/ptr_gui.rs | 3 +- src/render.rs | 99 ----------------- src/render/renderer.rs | 10 -- src/render/renderer/gfx_apis.rs | 1 - src/{render/renderer => }/renderer.rs | 18 ++-- src/{render => }/renderer/renderer_base.rs | 21 ++-- src/screenshoter.rs | 2 +- src/state.rs | 2 +- src/text.rs | 2 +- src/tree.rs | 2 +- src/tree/container.rs | 3 +- src/tree/display.rs | 2 +- src/tree/float.rs | 3 +- src/tree/output.rs | 3 +- src/tree/placeholder.rs | 3 +- src/tree/workspace.rs | 2 +- 68 files changed, 219 insertions(+), 222 deletions(-) rename src/{render/renderer => }/gfx_api.rs (96%) create mode 100644 src/gfx_apis.rs rename src/{render/renderer => }/gfx_apis/gl.rs (70%) rename src/{render => gfx_apis/gl}/egl.rs (95%) rename src/{render => gfx_apis/gl}/egl/context.rs (98%) rename src/{render => gfx_apis/gl}/egl/display.rs (99%) rename src/{render => gfx_apis/gl}/egl/image.rs (94%) rename src/{render => gfx_apis/gl}/egl/sys.rs (98%) rename src/{render => gfx_apis/gl}/ext.rs (97%) rename src/{render => gfx_apis/gl}/gl.rs (100%) rename src/{render => gfx_apis/gl}/gl/frame_buffer.rs (95%) rename src/{render => gfx_apis/gl}/gl/program.rs (98%) rename src/{render => gfx_apis/gl}/gl/render_buffer.rs (98%) rename src/{render => gfx_apis/gl}/gl/shader.rs (97%) rename src/{render => gfx_apis/gl}/gl/sys.rs (100%) rename src/{render => gfx_apis/gl}/gl/texture.rs (98%) rename src/{render => gfx_apis/gl}/proc.rs (100%) create mode 100644 src/gfx_apis/gl/renderer.rs rename src/{render => gfx_apis/gl}/renderer/context.rs (88%) rename src/{render => gfx_apis/gl}/renderer/framebuffer.rs (96%) rename src/{render => gfx_apis/gl}/renderer/image.rs (90%) rename src/{render => gfx_apis/gl}/renderer/texture.rs (72%) rename src/{render => gfx_apis/gl}/shaders/fill.frag.glsl (100%) rename src/{render => gfx_apis/gl}/shaders/fill.vert.glsl (100%) rename src/{render => gfx_apis/gl}/shaders/tex-alpha.frag.glsl (100%) rename src/{render => gfx_apis/gl}/shaders/tex-external-alpha.frag.glsl (100%) rename src/{render => gfx_apis/gl}/shaders/tex-external.frag.glsl (100%) rename src/{render => gfx_apis/gl}/shaders/tex.frag.glsl (100%) rename src/{render => gfx_apis/gl}/shaders/tex.vert.glsl (100%) delete mode 100644 src/render.rs delete mode 100644 src/render/renderer.rs delete mode 100644 src/render/renderer/gfx_apis.rs rename src/{render/renderer => }/renderer.rs (98%) rename src/{render => }/renderer/renderer_base.rs (93%) diff --git a/src/backend.rs b/src/backend.rs index 0d1a7a5d..9372e1fe 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -2,8 +2,8 @@ use { crate::{ async_engine::SpawnedFuture, fixed::Fixed, + gfx_apis::gl::Framebuffer, ifs::wl_seat::wl_pointer::{CONTINUOUS, FINGER, HORIZONTAL_SCROLL, VERTICAL_SCROLL, WHEEL}, - render::Framebuffer, video::drm::{ConnectorType, DrmError, DrmVersion}, }, std::{ diff --git a/src/backends/metal.rs b/src/backends/metal.rs index a1ebe46d..a63e7441 100644 --- a/src/backends/metal.rs +++ b/src/backends/metal.rs @@ -11,6 +11,7 @@ use { }, backends::metal::video::{MetalDrmDeviceData, MetalRenderContext, PendingDrmDevice}, dbus::{DbusError, SignalHandler}, + gfx_apis::gl::RenderError, libinput::{ consts::{ AccelProfile, LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE, @@ -23,7 +24,6 @@ use { LibInput, LibInputAdapter, LibInputError, }, logind::{LogindError, Session}, - render::RenderError, state::State, time::now_usec, udev::{Udev, UdevError, UdevMonitor}, diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index d7ce00f8..97eb5320 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -8,8 +8,9 @@ use { backends::metal::{MetalBackend, MetalError}, edid::Descriptor, format::{Format, ARGB8888, XRGB8888}, + gfx_apis::gl::{Framebuffer, RenderContext, Texture}, ifs::wp_presentation_feedback::{KIND_HW_COMPLETION, KIND_VSYNC}, - render::{Framebuffer, RenderContext, RenderResult, Texture}, + renderer::RenderResult, state::State, udev::UdevDevice, utils::{ diff --git a/src/backends/x.rs b/src/backends/x.rs index e746be61..a8f15661 100644 --- a/src/backends/x.rs +++ b/src/backends/x.rs @@ -9,7 +9,8 @@ use { }, fixed::Fixed, format::XRGB8888, - render::{Framebuffer, RenderContext, RenderError, RenderResult, Texture}, + gfx_apis::gl::{Framebuffer, RenderContext, RenderError, Texture}, + renderer::RenderResult, state::State, time::now_usec, utils::{ diff --git a/src/compositor.rs b/src/compositor.rs index 85205aba..1d7c2f51 100644 --- a/src/compositor.rs +++ b/src/compositor.rs @@ -15,12 +15,12 @@ use { config::ConfigProxy, dbus::Dbus, forker, + gfx_apis::gl::{self, RenderError}, globals::Globals, ifs::{wl_output::WlOutputGlobal, wl_surface::NoneSurfaceExt}, io_uring::{IoUring, IoUringError}, leaks, logger::Logger, - render::{self, RenderError}, scale::Scale, sighand::{self, SighandError}, state::{ConnectorData, IdleState, ScreenlockState, State, XWaylandState}, @@ -112,7 +112,7 @@ fn start_compositor2( log::info!("pid = {}", uapi::getpid()); init_fd_limit(); leaks::init(); - render::init()?; + gl::init()?; clientmem::init()?; let xkb_ctx = XkbContext::new().unwrap(); let xkb_keymap = xkb_ctx.keymap_from_str(include_str!("keymap.xkb")).unwrap(); diff --git a/src/cursor.rs b/src/cursor.rs index 9eb4b98b..8c0b3764 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -2,8 +2,9 @@ use { crate::{ fixed::Fixed, format::ARGB8888, + gfx_apis::gl::{RenderContext, RenderError, Texture}, rect::Rect, - render::{RenderContext, RenderError, Renderer, Texture}, + renderer::Renderer, scale::Scale, state::State, time::Time, diff --git a/src/format.rs b/src/format.rs index c5530b76..1d1f9bd0 100644 --- a/src/format.rs +++ b/src/format.rs @@ -1,10 +1,10 @@ use { crate::{ + gfx_apis::gl::sys::{GLint, GL_BGRA_EXT, GL_RGBA, GL_UNSIGNED_BYTE}, pipewire::pw_pod::{ SPA_VIDEO_FORMAT_BGRx, SPA_VIDEO_FORMAT_RGBx, SpaVideoFormat, SPA_VIDEO_FORMAT_BGRA, SPA_VIDEO_FORMAT_NV12, SPA_VIDEO_FORMAT_RGBA, }, - render::sys::{GLint, GL_BGRA_EXT, GL_RGBA, GL_UNSIGNED_BYTE}, utils::debug_fn::debug_fn, }, ahash::AHashMap, diff --git a/src/render/renderer/gfx_api.rs b/src/gfx_api.rs similarity index 96% rename from src/render/renderer/gfx_api.rs rename to src/gfx_api.rs index 2790cb7b..73277553 100644 --- a/src/render/renderer/gfx_api.rs +++ b/src/gfx_api.rs @@ -1,5 +1,5 @@ use { - crate::{format::Format, render::Texture, theme::Color}, + crate::{format::Format, gfx_apis::gl::Texture, theme::Color}, std::rc::Rc, }; diff --git a/src/gfx_apis.rs b/src/gfx_apis.rs new file mode 100644 index 00000000..a1367e79 --- /dev/null +++ b/src/gfx_apis.rs @@ -0,0 +1 @@ +pub mod gl; diff --git a/src/render/renderer/gfx_apis/gl.rs b/src/gfx_apis/gl.rs similarity index 70% rename from src/render/renderer/gfx_apis/gl.rs rename to src/gfx_apis/gl.rs index f774cec7..eecb0325 100644 --- a/src/render/renderer/gfx_apis/gl.rs +++ b/src/gfx_apis/gl.rs @@ -1,8 +1,29 @@ +macro_rules! egl_transparent { + ($name:ident) => { + #[derive(Copy, Clone, Debug, Eq, PartialEq)] + #[repr(transparent)] + pub struct $name(pub *mut u8); + + impl $name { + #[allow(dead_code)] + pub const fn none() -> Self { + Self(std::ptr::null_mut()) + } + + #[allow(dead_code)] + pub fn is_none(self) -> bool { + self.0.is_null() + } + } + }; +} + +pub use renderer::*; use { crate::{ format::Format, - render::{ - gfx_api::{BufferPoints, CopyTexture, FillRect, GfxApiOpt}, + gfx_api::{BufferPoints, CopyTexture, FillRect, GfxApiOpt}, + gfx_apis::gl::{ gl::texture::image_target, sys::{ glActiveTexture, glBindTexture, glClear, glClearColor, glDisable, @@ -11,15 +32,90 @@ use { GL_BLEND, GL_COLOR_BUFFER_BIT, GL_FALSE, GL_FLOAT, GL_LINEAR, GL_TEXTURE0, GL_TEXTURE_MIN_FILTER, GL_TRIANGLES, GL_TRIANGLE_STRIP, }, - Framebuffer, RenderContext, Texture, }, theme::Color, utils::{rc_eq::rc_eq, vecstorage::VecStorage}, + video::{drm::DrmError, gbm::GbmError}, }, isnt::std_1::vec::IsntVecExt, std::cell::RefCell, + thiserror::Error, }; +mod egl; +mod ext; +mod gl; +mod proc; +mod renderer; + +pub mod sys { + pub use super::{egl::sys::*, gl::sys::*}; +} + +pub fn init() -> Result<(), RenderError> { + egl::init() +} + +#[derive(Debug, Error)] +pub enum RenderError { + #[error("EGL library does not support `EGL_EXT_platform_base`")] + ExtPlatformBase, + #[error("Could not compile a shader")] + ShaderCompileFailed, + #[error("Could not link a program")] + ProgramLink, + #[error("Could not bind to `EGL_OPENGL_ES_API`")] + BindFailed, + #[error("EGL library does not support the GBM platform")] + GbmExt, + #[error("Could not create a GBM device")] + Gbm(#[source] GbmError), + #[error("`eglCreateContext` failed")] + CreateContext, + #[error("`eglMakeCurrent` failed")] + MakeCurrent, + #[error("`eglCreateImageKHR` failed")] + CreateImage, + #[error("Image buffer is too small")] + SmallImageBuffer, + #[error("Binding a renderbuffer to a framebuffer failed")] + CreateFramebuffer, + #[error("`eglGetPlatformDisplayEXT` failed")] + GetDisplay, + #[error("`eglInitialize` failed")] + Initialize, + #[error("EGL display does not support `EGL_EXT_image_dma_buf_import_modifiers`")] + DmaBufImport, + #[error("GLES driver does not support `GL_OES_EGL_image`")] + OesEglImage, + #[error("EGL display does not support `EGL_KHR_image_base`")] + ImageBase, + #[error( + "EGL display does not support `EGL_KHR_no_config_context` or `EGL_MESA_configless_context`" + )] + ConfiglessContext, + #[error("EGL display does not support `EGL_KHR_surfaceless_context`")] + SurfacelessContext, + #[error("`eglQueryDmaBufFormatsEXT` failed")] + QueryDmaBufFormats, + #[error("`eglQueryDmaBufModifiersEXT` failed")] + QueryDmaBufModifiers, + #[error(transparent)] + DrmError(#[from] DrmError), + #[error("The GLES driver does not support the XRGB8888 format")] + XRGB888, + #[error("The DRM device does not have a render node")] + NoRenderNode, + #[error("The requested format is not supported")] + UnsupportedFormat, + #[error("The requested modifier is not supported")] + UnsupportedModifier, + #[error("Image is external only and cannot be rendered to")] + ExternalOnly, + #[error("OpenGL context does not support external textures")] + ExternalUnsupported, +} + #[derive(Default)] pub struct GfxGlState { triangles: RefCell>, diff --git a/src/render/egl.rs b/src/gfx_apis/gl/egl.rs similarity index 95% rename from src/render/egl.rs rename to src/gfx_apis/gl/egl.rs index 2108e95b..7cff9d16 100644 --- a/src/render/egl.rs +++ b/src/gfx_apis/gl/egl.rs @@ -1,5 +1,5 @@ use { - crate::render::{ + crate::gfx_apis::gl::{ egl::sys::{ eglBindAPI, EGLAttrib, EGLLabelKHR, EGLenum, EGLint, EGL_DEBUG_MSG_CRITICAL_KHR, EGL_DEBUG_MSG_ERROR_KHR, EGL_DEBUG_MSG_INFO_KHR, EGL_DEBUG_MSG_WARN_KHR, EGL_NONE, @@ -27,9 +27,9 @@ pub mod display; pub mod image; pub mod sys; -pub(super) static PROCS: Lazy = Lazy::new(ExtProc::load); +pub(crate) static PROCS: Lazy = Lazy::new(ExtProc::load); -pub(super) static EXTS: Lazy = Lazy::new(get_client_ext); +pub(crate) static EXTS: Lazy = Lazy::new(get_client_ext); pub fn init() -> Result<(), RenderError> { if !EXTS.contains(ClientExt::EXT_PLATFORM_BASE) { diff --git a/src/render/egl/context.rs b/src/gfx_apis/gl/egl/context.rs similarity index 98% rename from src/render/egl/context.rs rename to src/gfx_apis/gl/egl/context.rs index 3e895cd7..097fa7be 100644 --- a/src/render/egl/context.rs +++ b/src/gfx_apis/gl/egl/context.rs @@ -1,5 +1,5 @@ use { - crate::render::{ + crate::gfx_apis::gl::{ egl::{ display::EglDisplay, sys::{eglDestroyContext, eglMakeCurrent, EGLContext, EGLSurface, EGL_FALSE, EGL_TRUE}, diff --git a/src/render/egl/display.rs b/src/gfx_apis/gl/egl/display.rs similarity index 99% rename from src/render/egl/display.rs rename to src/gfx_apis/gl/egl/display.rs index 04520929..c85bd1c6 100644 --- a/src/render/egl/display.rs +++ b/src/gfx_apis/gl/egl/display.rs @@ -1,7 +1,7 @@ use { crate::{ format::{formats, Format}, - render::{ + gfx_apis::gl::{ egl::{ context::EglContext, image::EglImage, diff --git a/src/render/egl/image.rs b/src/gfx_apis/gl/egl/image.rs similarity index 94% rename from src/render/egl/image.rs rename to src/gfx_apis/gl/egl/image.rs index 4746e9db..ff7a1c0d 100644 --- a/src/render/egl/image.rs +++ b/src/gfx_apis/gl/egl/image.rs @@ -1,5 +1,5 @@ use { - crate::render::egl::{ + crate::gfx_apis::gl::egl::{ display::EglDisplay, sys::{EGLImageKHR, EGL_FALSE}, PROCS, diff --git a/src/render/egl/sys.rs b/src/gfx_apis/gl/egl/sys.rs similarity index 98% rename from src/render/egl/sys.rs rename to src/gfx_apis/gl/egl/sys.rs index 087c06a5..8282eb48 100644 --- a/src/render/egl/sys.rs +++ b/src/gfx_apis/gl/egl/sys.rs @@ -1,4 +1,4 @@ -use {crate::render::sys::GLenum, uapi::c}; +use {crate::gfx_apis::gl::sys::GLenum, uapi::c}; pub type EGLint = i32; pub type EGLenum = c::c_uint; diff --git a/src/render/ext.rs b/src/gfx_apis/gl/ext.rs similarity index 97% rename from src/render/ext.rs rename to src/gfx_apis/gl/ext.rs index da0c63cd..02fac8cd 100644 --- a/src/render/ext.rs +++ b/src/gfx_apis/gl/ext.rs @@ -1,6 +1,6 @@ use { crate::{ - render::{ + gfx_apis::gl::{ egl::sys::{eglQueryString, EGLDisplay, EGL_EXTENSIONS}, gl::sys::{glGetString, GL_EXTENSIONS}, }, @@ -82,7 +82,7 @@ bitflags::bitflags! { } } -pub(super) unsafe fn get_display_ext(dpy: EGLDisplay) -> DisplayExt { +pub(crate) unsafe fn get_display_ext(dpy: EGLDisplay) -> DisplayExt { let map = [ ("EGL_KHR_image_base", DisplayExt::KHR_IMAGE_BASE), ( diff --git a/src/render/gl.rs b/src/gfx_apis/gl/gl.rs similarity index 100% rename from src/render/gl.rs rename to src/gfx_apis/gl/gl.rs diff --git a/src/render/gl/frame_buffer.rs b/src/gfx_apis/gl/gl/frame_buffer.rs similarity index 95% rename from src/render/gl/frame_buffer.rs rename to src/gfx_apis/gl/gl/frame_buffer.rs index edfa62bf..70d289a0 100644 --- a/src/render/gl/frame_buffer.rs +++ b/src/gfx_apis/gl/gl/frame_buffer.rs @@ -1,5 +1,5 @@ use { - crate::render::{ + crate::gfx_apis::gl::{ egl::context::EglContext, gl::{ render_buffer::GlRenderBuffer, diff --git a/src/render/gl/program.rs b/src/gfx_apis/gl/gl/program.rs similarity index 98% rename from src/render/gl/program.rs rename to src/gfx_apis/gl/gl/program.rs index 759d7a81..6d683130 100644 --- a/src/render/gl/program.rs +++ b/src/gfx_apis/gl/gl/program.rs @@ -1,5 +1,5 @@ use { - crate::render::{ + crate::gfx_apis::gl::{ egl::context::EglContext, gl::{ shader::GlShader, diff --git a/src/render/gl/render_buffer.rs b/src/gfx_apis/gl/gl/render_buffer.rs similarity index 98% rename from src/render/gl/render_buffer.rs rename to src/gfx_apis/gl/gl/render_buffer.rs index 7e45eec2..ff4ad15c 100644 --- a/src/render/gl/render_buffer.rs +++ b/src/gfx_apis/gl/gl/render_buffer.rs @@ -1,5 +1,5 @@ use { - crate::render::{ + crate::gfx_apis::gl::{ egl::{context::EglContext, image::EglImage, PROCS}, gl::{ frame_buffer::GlFrameBuffer, diff --git a/src/render/gl/shader.rs b/src/gfx_apis/gl/gl/shader.rs similarity index 97% rename from src/render/gl/shader.rs rename to src/gfx_apis/gl/gl/shader.rs index 037ef79c..6a8db473 100644 --- a/src/render/gl/shader.rs +++ b/src/gfx_apis/gl/gl/shader.rs @@ -1,5 +1,5 @@ use { - crate::render::{ + crate::gfx_apis::gl::{ egl::context::EglContext, gl::sys::{ glCompileShader, glCreateShader, glDeleteShader, glGetShaderiv, glShaderSource, GLenum, diff --git a/src/render/gl/sys.rs b/src/gfx_apis/gl/gl/sys.rs similarity index 100% rename from src/render/gl/sys.rs rename to src/gfx_apis/gl/gl/sys.rs diff --git a/src/render/gl/texture.rs b/src/gfx_apis/gl/gl/texture.rs similarity index 98% rename from src/render/gl/texture.rs rename to src/gfx_apis/gl/gl/texture.rs index e488eac2..3031b395 100644 --- a/src/render/gl/texture.rs +++ b/src/gfx_apis/gl/gl/texture.rs @@ -1,7 +1,7 @@ use { crate::{ format::Format, - render::{ + gfx_apis::gl::{ egl::{context::EglContext, image::EglImage, PROCS}, ext::GlExt, gl::sys::{ @@ -17,7 +17,7 @@ use { }; pub struct GlTexture { - pub(super) ctx: Rc, + pub(crate) ctx: Rc, pub img: Option>, pub tex: GLuint, pub width: i32, diff --git a/src/render/proc.rs b/src/gfx_apis/gl/proc.rs similarity index 100% rename from src/render/proc.rs rename to src/gfx_apis/gl/proc.rs diff --git a/src/gfx_apis/gl/renderer.rs b/src/gfx_apis/gl/renderer.rs new file mode 100644 index 00000000..98e14562 --- /dev/null +++ b/src/gfx_apis/gl/renderer.rs @@ -0,0 +1,6 @@ +pub use {context::*, framebuffer::*, image::*, texture::*}; + +mod context; +mod framebuffer; +mod image; +mod texture; diff --git a/src/render/renderer/context.rs b/src/gfx_apis/gl/renderer/context.rs similarity index 88% rename from src/render/renderer/context.rs rename to src/gfx_apis/gl/renderer/context.rs index 50f6ba07..ddde507f 100644 --- a/src/render/renderer/context.rs +++ b/src/gfx_apis/gl/renderer/context.rs @@ -1,18 +1,18 @@ use { crate::{ format::{Format, XRGB8888}, - render::{ + gfx_api::GfxApiOpt, + gfx_apis::gl::{ egl::{ context::EglContext, display::{EglDisplay, EglFormat}, }, ext::GlExt, - gfx_api::GfxApiOpt, gl::{ program::GlProgram, render_buffer::GlRenderBuffer, sys::GLint, texture::GlTexture, }, - renderer::{framebuffer::Framebuffer, gfx_apis::gl::GfxGlState, image::Image}, - RenderError, Texture, + renderer::{framebuffer::Framebuffer, image::Image}, + GfxGlState, RenderError, Texture, }, video::{ dmabuf::DmaBuf, @@ -30,11 +30,11 @@ use { uapi::ustr, }; -pub(super) struct TexProg { - pub(super) prog: GlProgram, - pub(super) pos: GLint, - pub(super) texcoord: GLint, - pub(super) tex: GLint, +pub(crate) struct TexProg { + pub(crate) prog: GlProgram, + pub(crate) pos: GLint, + pub(crate) texcoord: GLint, + pub(crate) tex: GLint, } impl TexProg { @@ -48,26 +48,26 @@ impl TexProg { } } -pub(super) struct TexProgs { +pub(crate) struct TexProgs { pub alpha: TexProg, pub solid: TexProg, } pub struct RenderContext { - pub(super) ctx: Rc, + pub(crate) ctx: Rc, pub gbm: Rc, - pub(super) render_node: Rc, + pub(crate) render_node: Rc, - pub(super) tex_internal: TexProgs, - pub(super) tex_external: Option, + pub(crate) tex_internal: TexProgs, + pub(crate) tex_external: Option, - pub(super) fill_prog: GlProgram, - pub(super) fill_prog_pos: GLint, - pub(super) fill_prog_color: GLint, + pub(crate) fill_prog: GlProgram, + pub(crate) fill_prog_pos: GLint, + pub(crate) fill_prog_color: GLint, - pub(super) gfx_ops: RefCell>, - pub(super) gl_state: RefCell, + pub(crate) gfx_ops: RefCell>, + pub(crate) gl_state: RefCell, } impl Debug for RenderContext { diff --git a/src/render/renderer/framebuffer.rs b/src/gfx_apis/gl/renderer/framebuffer.rs similarity index 96% rename from src/render/renderer/framebuffer.rs rename to src/gfx_apis/gl/renderer/framebuffer.rs index 999f5677..94bb069f 100644 --- a/src/render/renderer/framebuffer.rs +++ b/src/gfx_apis/gl/renderer/framebuffer.rs @@ -3,8 +3,7 @@ use { cursor::Cursor, fixed::Fixed, format::{Format, ARGB8888, XRGB8888}, - rect::Rect, - render::{ + gfx_apis::gl::{ gl::{ frame_buffer::GlFrameBuffer, sys::{ @@ -12,13 +11,13 @@ use { GL_FRAMEBUFFER, }, }, - renderer::{ - context::RenderContext, gfx_apis::gl::run_ops, renderer::Renderer, - renderer_base::RendererBase, - }, + renderer::context::RenderContext, + run_ops, sys::{glBlendFunc, glFlush, glReadnPixels, GL_ONE, GL_ONE_MINUS_SRC_ALPHA}, - RenderResult, Texture, + Texture, }, + rect::Rect, + renderer::{renderer_base::RendererBase, RenderResult, Renderer}, scale::Scale, state::State, tree::Node, @@ -31,8 +30,8 @@ use { }; pub struct Framebuffer { - pub(super) ctx: Rc, - pub(super) gl: GlFrameBuffer, + pub(crate) ctx: Rc, + pub(crate) gl: GlFrameBuffer, } impl Debug for Framebuffer { diff --git a/src/render/renderer/image.rs b/src/gfx_apis/gl/renderer/image.rs similarity index 90% rename from src/render/renderer/image.rs rename to src/gfx_apis/gl/renderer/image.rs index 6156fbea..aef63a71 100644 --- a/src/render/renderer/image.rs +++ b/src/gfx_apis/gl/renderer/image.rs @@ -1,5 +1,5 @@ use { - crate::render::{ + crate::gfx_apis::gl::{ egl::image::EglImage, gl::{render_buffer::GlRenderBuffer, texture::GlTexture}, Framebuffer, RenderContext, RenderError, Texture, @@ -8,8 +8,8 @@ use { }; pub struct Image { - pub(super) ctx: Rc, - pub(super) gl: Rc, + pub(crate) ctx: Rc, + pub(crate) gl: Rc, } impl Image { diff --git a/src/render/renderer/texture.rs b/src/gfx_apis/gl/renderer/texture.rs similarity index 72% rename from src/render/renderer/texture.rs rename to src/gfx_apis/gl/renderer/texture.rs index 9ac815f2..b6b21d55 100644 --- a/src/render/renderer/texture.rs +++ b/src/gfx_apis/gl/renderer/texture.rs @@ -1,5 +1,5 @@ use { - crate::render::{gl::texture::GlTexture, renderer::context::RenderContext}, + crate::gfx_apis::gl::{gl::texture::GlTexture, renderer::context::RenderContext}, std::{ fmt::{Debug, Formatter}, rc::Rc, @@ -7,8 +7,8 @@ use { }; pub struct Texture { - pub(super) ctx: Rc, - pub(super) gl: GlTexture, + pub(crate) ctx: Rc, + pub(crate) gl: GlTexture, } impl Debug for Texture { diff --git a/src/render/shaders/fill.frag.glsl b/src/gfx_apis/gl/shaders/fill.frag.glsl similarity index 100% rename from src/render/shaders/fill.frag.glsl rename to src/gfx_apis/gl/shaders/fill.frag.glsl diff --git a/src/render/shaders/fill.vert.glsl b/src/gfx_apis/gl/shaders/fill.vert.glsl similarity index 100% rename from src/render/shaders/fill.vert.glsl rename to src/gfx_apis/gl/shaders/fill.vert.glsl diff --git a/src/render/shaders/tex-alpha.frag.glsl b/src/gfx_apis/gl/shaders/tex-alpha.frag.glsl similarity index 100% rename from src/render/shaders/tex-alpha.frag.glsl rename to src/gfx_apis/gl/shaders/tex-alpha.frag.glsl diff --git a/src/render/shaders/tex-external-alpha.frag.glsl b/src/gfx_apis/gl/shaders/tex-external-alpha.frag.glsl similarity index 100% rename from src/render/shaders/tex-external-alpha.frag.glsl rename to src/gfx_apis/gl/shaders/tex-external-alpha.frag.glsl diff --git a/src/render/shaders/tex-external.frag.glsl b/src/gfx_apis/gl/shaders/tex-external.frag.glsl similarity index 100% rename from src/render/shaders/tex-external.frag.glsl rename to src/gfx_apis/gl/shaders/tex-external.frag.glsl diff --git a/src/render/shaders/tex.frag.glsl b/src/gfx_apis/gl/shaders/tex.frag.glsl similarity index 100% rename from src/render/shaders/tex.frag.glsl rename to src/gfx_apis/gl/shaders/tex.frag.glsl diff --git a/src/render/shaders/tex.vert.glsl b/src/gfx_apis/gl/shaders/tex.vert.glsl similarity index 100% rename from src/render/shaders/tex.vert.glsl rename to src/gfx_apis/gl/shaders/tex.vert.glsl diff --git a/src/ifs/jay_render_ctx.rs b/src/ifs/jay_render_ctx.rs index 73e8374b..0f2d980b 100644 --- a/src/ifs/jay_render_ctx.rs +++ b/src/ifs/jay_render_ctx.rs @@ -1,9 +1,9 @@ use { crate::{ client::{Client, ClientError}, + gfx_apis::gl::RenderContext, leaks::Tracker, object::Object, - render::RenderContext, utils::{ buffd::{MsgParser, MsgParserError}, errorfmt::ErrorFmt, diff --git a/src/ifs/jay_screencast.rs b/src/ifs/jay_screencast.rs index 589ac7d4..a7edec67 100644 --- a/src/ifs/jay_screencast.rs +++ b/src/ifs/jay_screencast.rs @@ -2,10 +2,10 @@ use { crate::{ client::{Client, ClientError}, format::XRGB8888, + gfx_apis::gl::{Framebuffer, RenderContext, RenderError, Texture}, ifs::jay_output::JayOutput, leaks::Tracker, object::Object, - render::{Framebuffer, RenderContext, RenderError, Texture}, tree::{OutputNode, WorkspaceNodeId}, utils::{ buffd::{MsgParser, MsgParserError}, diff --git a/src/ifs/wl_buffer.rs b/src/ifs/wl_buffer.rs index cba05ae0..870feaaf 100644 --- a/src/ifs/wl_buffer.rs +++ b/src/ifs/wl_buffer.rs @@ -3,10 +3,10 @@ use { client::{Client, ClientError}, clientmem::{ClientMem, ClientMemError, ClientMemOffset}, format::Format, + gfx_apis::gl::{Framebuffer, Image, RenderError, Texture}, leaks::Tracker, object::Object, rect::Rect, - render::{Framebuffer, Image, RenderError, Texture}, utils::{ buffd::{MsgParser, MsgParserError}, clonecell::CloneCell, diff --git a/src/ifs/wl_drm.rs b/src/ifs/wl_drm.rs index 8842b8ee..379eb33a 100644 --- a/src/ifs/wl_drm.rs +++ b/src/ifs/wl_drm.rs @@ -1,11 +1,11 @@ use { crate::{ client::{Client, ClientError}, + gfx_apis::gl::RenderError, globals::{Global, GlobalName}, ifs::wl_buffer::WlBuffer, leaks::Tracker, object::Object, - render::RenderError, utils::buffd::{MsgParser, MsgParserError}, video::{ dmabuf::{DmaBuf, DmaBufPlane}, diff --git a/src/ifs/wl_output.rs b/src/ifs/wl_output.rs index 0b9a0282..c866d8d1 100644 --- a/src/ifs/wl_output.rs +++ b/src/ifs/wl_output.rs @@ -3,6 +3,7 @@ use { backend, client::{Client, ClientError, ClientId}, format::XRGB8888, + gfx_apis::gl::{Framebuffer, Texture}, globals::{Global, GlobalName}, ifs::{ wl_buffer::WlBufferStorage, wl_surface::WlSurface, @@ -11,7 +12,6 @@ use { leaks::Tracker, object::Object, rect::Rect, - render::{Framebuffer, Texture}, state::{ConnectorData, State}, time::Time, tree::OutputNode, diff --git a/src/ifs/wl_surface.rs b/src/ifs/wl_surface.rs index 77ff4692..ad6d493e 100644 --- a/src/ifs/wl_surface.rs +++ b/src/ifs/wl_surface.rs @@ -15,6 +15,7 @@ use { backend::KeyState, client::{Client, ClientError, RequestParser}, fixed::Fixed, + gfx_api::{BufferPoint, BufferPoints}, ifs::{ wl_buffer::WlBuffer, wl_callback::WlCallback, @@ -38,10 +39,7 @@ use { leaks::Tracker, object::Object, rect::{Rect, Region}, - render::{ - gfx_api::{BufferPoint, BufferPoints}, - Renderer, - }, + renderer::Renderer, tree::{ FindTreeResult, FoundNode, Node, NodeId, NodeVisitor, NodeVisitorBase, OutputNode, ToplevelNode, diff --git a/src/ifs/wl_surface/cursor.rs b/src/ifs/wl_surface/cursor.rs index 888a21d3..99df51df 100644 --- a/src/ifs/wl_surface/cursor.rs +++ b/src/ifs/wl_surface/cursor.rs @@ -5,7 +5,7 @@ use { ifs::{wl_seat::WlSeatGlobal, wl_surface::WlSurface}, leaks::Tracker, rect::Rect, - render::Renderer, + renderer::Renderer, scale::Scale, tree::{Node, NodeVisitorBase, OutputNode}, }, diff --git a/src/ifs/wl_surface/x_surface/xwindow.rs b/src/ifs/wl_surface/x_surface/xwindow.rs index e5851249..fe092165 100644 --- a/src/ifs/wl_surface/x_surface/xwindow.rs +++ b/src/ifs/wl_surface/x_surface/xwindow.rs @@ -8,7 +8,7 @@ use { wl_surface::{x_surface::XSurface, WlSurface, WlSurfaceError}, }, rect::Rect, - render::Renderer, + renderer::Renderer, state::State, tree::{ Direction, FindTreeResult, FoundNode, Node, NodeId, NodeVisitor, StackedNode, diff --git a/src/ifs/wl_surface/xdg_surface/xdg_popup.rs b/src/ifs/wl_surface/xdg_surface/xdg_popup.rs index 993fb30a..a24498b9 100644 --- a/src/ifs/wl_surface/xdg_surface/xdg_popup.rs +++ b/src/ifs/wl_surface/xdg_surface/xdg_popup.rs @@ -11,7 +11,7 @@ use { leaks::Tracker, object::Object, rect::Rect, - render::Renderer, + renderer::Renderer, tree::{FindTreeResult, FoundNode, Node, NodeId, NodeVisitor, StackedNode, WorkspaceNode}, utils::{ buffd::{MsgParser, MsgParserError}, diff --git a/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs b/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs index ad013aea..830c7556 100644 --- a/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs +++ b/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs @@ -12,7 +12,7 @@ use { leaks::Tracker, object::Object, rect::Rect, - render::Renderer, + renderer::Renderer, state::State, tree::{ Direction, FindTreeResult, FoundNode, Node, NodeId, NodeVisitor, ToplevelData, diff --git a/src/ifs/wl_surface/zwlr_layer_surface_v1.rs b/src/ifs/wl_surface/zwlr_layer_surface_v1.rs index 34f158e1..924e473e 100644 --- a/src/ifs/wl_surface/zwlr_layer_surface_v1.rs +++ b/src/ifs/wl_surface/zwlr_layer_surface_v1.rs @@ -11,7 +11,7 @@ use { leaks::Tracker, object::Object, rect::Rect, - render::Renderer, + renderer::Renderer, tree::{FindTreeResult, FoundNode, Node, NodeId, NodeVisitor, OutputNode}, utils::{ bitflags::BitflagsExt, diff --git a/src/ifs/zwp_linux_buffer_params_v1.rs b/src/ifs/zwp_linux_buffer_params_v1.rs index 6feb0213..52c05e32 100644 --- a/src/ifs/zwp_linux_buffer_params_v1.rs +++ b/src/ifs/zwp_linux_buffer_params_v1.rs @@ -1,10 +1,10 @@ use { crate::{ client::ClientError, + gfx_apis::gl::RenderError, ifs::{wl_buffer::WlBuffer, zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1}, leaks::Tracker, object::Object, - render::RenderError, utils::{ buffd::{MsgParser, MsgParserError}, errorfmt::ErrorFmt, diff --git a/src/it/test_backend.rs b/src/it/test_backend.rs index df1ffbba..1863d85b 100644 --- a/src/it/test_backend.rs +++ b/src/it/test_backend.rs @@ -9,8 +9,8 @@ use { }, compositor::TestFuture, fixed::Fixed, + gfx_apis::gl::{RenderContext, RenderError}, it::test_error::TestResult, - render::{RenderContext, RenderError}, state::State, time::now_usec, utils::{ diff --git a/src/main.rs b/src/main.rs index 9246f5ae..bd871451 100644 --- a/src/main.rs +++ b/src/main.rs @@ -62,6 +62,8 @@ mod edid; mod fixed; mod forker; mod format; +mod gfx_api; +mod gfx_apis; mod globals; mod ifs; mod io_uring; @@ -75,7 +77,7 @@ mod pango; mod pipewire; mod portal; mod rect; -mod render; +mod renderer; mod scale; mod screenshoter; mod sighand; diff --git a/src/portal/ptl_display.rs b/src/portal/ptl_display.rs index f012d715..3756a677 100644 --- a/src/portal/ptl_display.rs +++ b/src/portal/ptl_display.rs @@ -1,11 +1,11 @@ use { crate::{ + gfx_apis::gl::RenderContext, ifs::wl_seat::POINTER, portal::{ ptl_render_ctx::PortalRenderCtx, ptl_screencast::ScreencastSession, ptr_gui::WindowData, PortalState, }, - render::RenderContext, utils::{ bitflags::BitflagsExt, clonecell::CloneCell, copyhashmap::CopyHashMap, errorfmt::ErrorFmt, oserror::OsError, diff --git a/src/portal/ptl_render_ctx.rs b/src/portal/ptl_render_ctx.rs index f4589fdf..885c36cb 100644 --- a/src/portal/ptl_render_ctx.rs +++ b/src/portal/ptl_render_ctx.rs @@ -1,4 +1,4 @@ -use {crate::render::RenderContext, std::rc::Rc, uapi::c}; +use {crate::gfx_apis::gl::RenderContext, std::rc::Rc, uapi::c}; pub struct PortalRenderCtx { pub dev_id: c::dev_t, diff --git a/src/portal/ptr_gui.rs b/src/portal/ptr_gui.rs index 9a5f2c24..5afff008 100644 --- a/src/portal/ptr_gui.rs +++ b/src/portal/ptr_gui.rs @@ -4,9 +4,10 @@ use { cursor::KnownCursor, fixed::Fixed, format::ARGB8888, + gfx_apis::gl::{Framebuffer, RenderContext, Texture}, ifs::zwlr_layer_shell_v1::OVERLAY, portal::ptl_display::{PortalDisplay, PortalOutput, PortalSeat}, - render::{Framebuffer, RenderContext, RendererBase, Texture}, + renderer::renderer_base::RendererBase, scale::Scale, text::{self, TextMeasurement}, theme::Color, diff --git a/src/render.rs b/src/render.rs deleted file mode 100644 index 92ee0b2f..00000000 --- a/src/render.rs +++ /dev/null @@ -1,99 +0,0 @@ -macro_rules! egl_transparent { - ($name:ident) => { - #[derive(Copy, Clone, Debug, Eq, PartialEq)] - #[repr(transparent)] - pub struct $name(pub *mut u8); - - impl $name { - #[allow(dead_code)] - pub const fn none() -> Self { - Self(std::ptr::null_mut()) - } - - #[allow(dead_code)] - pub fn is_none(self) -> bool { - self.0.is_null() - } - } - }; -} - -pub use renderer::*; -use { - crate::video::{drm::DrmError, gbm::GbmError}, - thiserror::Error, -}; - -mod egl; -mod ext; -mod gl; -mod proc; -mod renderer; - -pub mod sys { - pub use super::{egl::sys::*, gl::sys::*}; -} - -pub fn init() -> Result<(), RenderError> { - egl::init() -} - -#[derive(Debug, Error)] -pub enum RenderError { - #[error("EGL library does not support `EGL_EXT_platform_base`")] - ExtPlatformBase, - #[error("Could not compile a shader")] - ShaderCompileFailed, - #[error("Could not link a program")] - ProgramLink, - #[error("Could not bind to `EGL_OPENGL_ES_API`")] - BindFailed, - #[error("EGL library does not support the GBM platform")] - GbmExt, - #[error("Could not create a GBM device")] - Gbm(#[source] GbmError), - #[error("`eglCreateContext` failed")] - CreateContext, - #[error("`eglMakeCurrent` failed")] - MakeCurrent, - #[error("`eglCreateImageKHR` failed")] - CreateImage, - #[error("Image buffer is too small")] - SmallImageBuffer, - #[error("Binding a renderbuffer to a framebuffer failed")] - CreateFramebuffer, - #[error("`eglGetPlatformDisplayEXT` failed")] - GetDisplay, - #[error("`eglInitialize` failed")] - Initialize, - #[error("EGL display does not support `EGL_EXT_image_dma_buf_import_modifiers`")] - DmaBufImport, - #[error("GLES driver does not support `GL_OES_EGL_image`")] - OesEglImage, - #[error("EGL display does not support `EGL_KHR_image_base`")] - ImageBase, - #[error( - "EGL display does not support `EGL_KHR_no_config_context` or `EGL_MESA_configless_context`" - )] - ConfiglessContext, - #[error("EGL display does not support `EGL_KHR_surfaceless_context`")] - SurfacelessContext, - #[error("`eglQueryDmaBufFormatsEXT` failed")] - QueryDmaBufFormats, - #[error("`eglQueryDmaBufModifiersEXT` failed")] - QueryDmaBufModifiers, - #[error(transparent)] - DrmError(#[from] DrmError), - #[error("The GLES driver does not support the XRGB8888 format")] - XRGB888, - #[error("The DRM device does not have a render node")] - NoRenderNode, - #[error("The requested format is not supported")] - UnsupportedFormat, - #[error("The requested modifier is not supported")] - UnsupportedModifier, - #[error("Image is external only and cannot be rendered to")] - ExternalOnly, - #[error("OpenGL context does not support external textures")] - ExternalUnsupported, -} diff --git a/src/render/renderer.rs b/src/render/renderer.rs deleted file mode 100644 index 62d302ca..00000000 --- a/src/render/renderer.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub use {context::*, framebuffer::*, image::*, renderer::*, renderer_base::*, texture::*}; - -mod context; -mod framebuffer; -pub mod gfx_api; -mod gfx_apis; -mod image; -mod renderer; -mod renderer_base; -mod texture; diff --git a/src/render/renderer/gfx_apis.rs b/src/render/renderer/gfx_apis.rs deleted file mode 100644 index 64fbedfb..00000000 --- a/src/render/renderer/gfx_apis.rs +++ /dev/null @@ -1 +0,0 @@ -pub(super) mod gl; diff --git a/src/render/renderer/renderer.rs b/src/renderer.rs similarity index 98% rename from src/render/renderer/renderer.rs rename to src/renderer.rs index 35f4a67e..69f9a0b6 100644 --- a/src/render/renderer/renderer.rs +++ b/src/renderer.rs @@ -1,6 +1,7 @@ use { crate::{ format::ARGB8888, + gfx_api::{BufferPoints, GfxApiOpt}, ifs::{ wl_buffer::WlBuffer, wl_callback::WlCallback, @@ -10,10 +11,7 @@ use { wp_presentation_feedback::WpPresentationFeedback, }, rect::Rect, - render::{ - gfx_api::GfxApiOpt, - renderer::{gfx_api::BufferPoints, renderer_base::RendererBase}, - }, + renderer::renderer_base::RendererBase, scale::Scale, state::State, theme::Color, @@ -30,6 +28,8 @@ use { }, }; +pub mod renderer_base; + #[derive(Default)] pub struct RenderResult { pub frame_requests: Vec>, @@ -44,11 +44,11 @@ impl Debug for RenderResult { pub struct Renderer<'a> { pub base: RendererBase<'a>, - pub(super) state: &'a State, - pub(super) on_output: bool, - pub(super) result: &'a mut RenderResult, - pub(super) logical_extents: Rect, - pub(super) physical_extents: Rect, + pub state: &'a State, + pub on_output: bool, + pub result: &'a mut RenderResult, + pub logical_extents: Rect, + pub physical_extents: Rect, } impl Renderer<'_> { diff --git a/src/render/renderer/renderer_base.rs b/src/renderer/renderer_base.rs similarity index 93% rename from src/render/renderer/renderer_base.rs rename to src/renderer/renderer_base.rs index 0b751370..0fc1fad1 100644 --- a/src/render/renderer/renderer_base.rs +++ b/src/renderer/renderer_base.rs @@ -1,14 +1,11 @@ use { crate::{ format::Format, - rect::Rect, - render::{ - gfx_api::Clear, - renderer::gfx_api::{ - AbsoluteRect, BufferPoint, BufferPoints, CopyTexture, FillRect, GfxApiOpt, - }, - Texture, + gfx_api::{ + AbsoluteRect, BufferPoint, BufferPoints, Clear, CopyTexture, FillRect, GfxApiOpt, }, + gfx_apis::gl::Texture, + rect::Rect, scale::Scale, theme::Color, }, @@ -16,10 +13,10 @@ use { }; pub struct RendererBase<'a> { - pub(super) ops: &'a mut Vec, - pub(super) scaled: bool, - pub(super) scale: Scale, - pub(super) scalef: f64, + pub ops: &'a mut Vec, + pub scaled: bool, + pub scale: Scale, + pub scalef: f64, } impl RendererBase<'_> { @@ -143,7 +140,7 @@ impl RendererBase<'_> { let (twidth, theight) = if let Some(size) = tsize { size } else { - let (mut w, mut h) = (texture.gl.width, texture.gl.height); + let (mut w, mut h) = (texture.width(), texture.height()); if tscale != self.scale { let tscale = tscale.to_f64(); w = (w as f64 * self.scalef / tscale).round() as _; diff --git a/src/screenshoter.rs b/src/screenshoter.rs index c1c740ac..42f40edb 100644 --- a/src/screenshoter.rs +++ b/src/screenshoter.rs @@ -1,7 +1,7 @@ use { crate::{ format::XRGB8888, - render::RenderError, + gfx_apis::gl::RenderError, scale::Scale, state::State, video::{ diff --git a/src/state.rs b/src/state.rs index e4979dfa..24815f58 100644 --- a/src/state.rs +++ b/src/state.rs @@ -13,6 +13,7 @@ use { cursor::{Cursor, ServerCursors}, dbus::Dbus, forker::ForkerProxy, + gfx_apis::gl::RenderContext, globals::{Globals, GlobalsError, WaylandGlobal}, ifs::{ ext_session_lock_v1::ExtSessionLockV1, @@ -31,7 +32,6 @@ use { leaks::Tracker, logger::Logger, rect::Rect, - render::RenderContext, scale::Scale, theme::Theme, tree::{ diff --git a/src/text.rs b/src/text.rs index 3b9a1da2..99a4105e 100644 --- a/src/text.rs +++ b/src/text.rs @@ -1,6 +1,7 @@ use { crate::{ format::ARGB8888, + gfx_apis::gl::{RenderContext, RenderError, Texture}, pango::{ consts::{ CAIRO_FORMAT_ARGB32, CAIRO_OPERATOR_SOURCE, PANGO_ELLIPSIZE_END, PANGO_SCALE, @@ -9,7 +10,6 @@ use { PangoLayout, }, rect::Rect, - render::{RenderContext, RenderError, Texture}, theme::Color, }, std::{ops::Neg, rc::Rc}, diff --git a/src/tree.rs b/src/tree.rs index 1cea13d1..0ea96811 100644 --- a/src/tree.rs +++ b/src/tree.rs @@ -8,7 +8,7 @@ use { wl_surface::WlSurface, }, rect::Rect, - render::Renderer, + renderer::Renderer, utils::numcell::NumCell, xkbcommon::ModifierState, }, diff --git a/src/tree/container.rs b/src/tree/container.rs index e1e444c4..5cce364f 100644 --- a/src/tree/container.rs +++ b/src/tree/container.rs @@ -3,12 +3,13 @@ use { backend::KeyState, cursor::KnownCursor, fixed::Fixed, + gfx_apis::gl::Texture, ifs::wl_seat::{ collect_kb_foci, collect_kb_foci2, wl_pointer::PendingScroll, NodeSeatState, SeatId, WlSeatGlobal, BTN_LEFT, }, rect::Rect, - render::{Renderer, Texture}, + renderer::Renderer, scale::Scale, state::State, text, diff --git a/src/tree/display.rs b/src/tree/display.rs index 5b5a3018..a60ca10f 100644 --- a/src/tree/display.rs +++ b/src/tree/display.rs @@ -4,7 +4,7 @@ use { cursor::KnownCursor, ifs::wl_seat::{NodeSeatState, WlSeatGlobal}, rect::Rect, - render::Renderer, + renderer::Renderer, tree::{ walker::NodeVisitor, FindTreeResult, FoundNode, Node, NodeId, OutputNode, StackedNode, }, diff --git a/src/tree/float.rs b/src/tree/float.rs index 6e61df6e..e4b0fcad 100644 --- a/src/tree/float.rs +++ b/src/tree/float.rs @@ -3,9 +3,10 @@ use { backend::KeyState, cursor::KnownCursor, fixed::Fixed, + gfx_apis::gl::Texture, ifs::wl_seat::{NodeSeatState, SeatId, WlSeatGlobal, BTN_LEFT}, rect::Rect, - render::{Renderer, Texture}, + renderer::Renderer, scale::Scale, state::State, text, diff --git a/src/tree/output.rs b/src/tree/output.rs index 42622099..02497da8 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -4,6 +4,7 @@ use { client::ClientId, cursor::KnownCursor, fixed::Fixed, + gfx_apis::gl::{Framebuffer, Texture}, ifs::{ jay_output::JayOutput, jay_screencast::JayScreencast, @@ -19,7 +20,7 @@ use { zwlr_layer_shell_v1::{BACKGROUND, BOTTOM, OVERLAY, TOP}, }, rect::Rect, - render::{Framebuffer, Renderer, Texture}, + renderer::Renderer, scale::Scale, state::State, text, diff --git a/src/tree/placeholder.rs b/src/tree/placeholder.rs index 294a6c81..37589d7e 100644 --- a/src/tree/placeholder.rs +++ b/src/tree/placeholder.rs @@ -3,9 +3,10 @@ use { client::Client, cursor::KnownCursor, fixed::Fixed, + gfx_apis::gl::Texture, ifs::wl_seat::{NodeSeatState, WlSeatGlobal}, rect::Rect, - render::{Renderer, Texture}, + renderer::Renderer, scale::Scale, state::State, text, diff --git a/src/tree/workspace.rs b/src/tree/workspace.rs index 55644d4b..00c11353 100644 --- a/src/tree/workspace.rs +++ b/src/tree/workspace.rs @@ -9,7 +9,7 @@ use { wl_surface::WlSurface, }, rect::Rect, - render::Renderer, + renderer::Renderer, tree::{ container::ContainerNode, walker::NodeVisitor, ContainingNode, Direction, FindTreeResult, FoundNode, Node, NodeId, NodeVisitorBase, OutputNode, StackedNode,