autocommit 2022-03-11 18:15:21 CET
This commit is contained in:
parent
0399772467
commit
b1890894b2
30 changed files with 2909 additions and 504 deletions
|
|
@ -1,4 +1,4 @@
|
|||
use crate::drm::drm::DrmDevice;
|
||||
use crate::drm::drm::NodeType;
|
||||
use crate::render::egl::device::EglDevice;
|
||||
use crate::render::egl::sys::{
|
||||
eglBindAPI, EGLAttrib, EGLLabelKHR, EGLenum, EGLint, EGL_DEBUG_MSG_CRITICAL_KHR,
|
||||
|
|
@ -8,10 +8,11 @@ use crate::render::egl::sys::{
|
|||
use crate::render::ext::{get_client_ext, get_device_ext, ClientExt, DeviceExt};
|
||||
use crate::render::proc::ExtProc;
|
||||
use crate::render::RenderError;
|
||||
use ahash::AHashMap;
|
||||
use bstr::ByteSlice;
|
||||
use log::Level;
|
||||
use once_cell::sync::Lazy;
|
||||
use std::ffi::CStr;
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::ptr;
|
||||
use sys::{
|
||||
EGL_BAD_ACCESS, EGL_BAD_ALLOC, EGL_BAD_ATTRIBUTE, EGL_BAD_CONFIG, EGL_BAD_CONTEXT,
|
||||
|
|
@ -63,12 +64,14 @@ pub fn init() -> Result<(), RenderError> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn find_drm_device(drm_dev: &DrmDevice) -> Result<Option<EglDevice>, RenderError> {
|
||||
pub fn find_drm_device(
|
||||
drm_dev: &AHashMap<NodeType, CString>,
|
||||
) -> Result<Option<EglDevice>, RenderError> {
|
||||
for device in query_devices()? {
|
||||
if device.exts.contains(DeviceExt::EXT_DEVICE_DRM) {
|
||||
let device_file = device.query_string(EGL_DRM_DEVICE_FILE_EXT)?;
|
||||
for (_, name) in drm_dev.nodes() {
|
||||
if device_file == name {
|
||||
for name in drm_dev.values() {
|
||||
if device_file == &**name {
|
||||
return Ok(Some(device));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::drm::dma::DmaBuf;
|
||||
use crate::drm::drm::{Drm, DRM_NODE_RENDER};
|
||||
use crate::drm::drm::{Drm, NodeType};
|
||||
use crate::format::{Format, XRGB8888};
|
||||
use crate::render::egl::context::EglContext;
|
||||
use crate::render::egl::find_drm_device;
|
||||
|
|
@ -15,6 +15,7 @@ use ahash::AHashMap;
|
|||
use renderdoc::{RenderDoc, V100};
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::ffi::CString;
|
||||
use std::fmt::{Debug, Formatter};
|
||||
use std::rc::Rc;
|
||||
use uapi::ustr;
|
||||
|
||||
|
|
@ -51,14 +52,20 @@ pub struct RenderContext {
|
|||
pub(super) fill_prog_color: GLint,
|
||||
}
|
||||
|
||||
impl Debug for RenderContext {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
f.debug_struct("RenderContext").finish_non_exhaustive()
|
||||
}
|
||||
}
|
||||
|
||||
impl RenderContext {
|
||||
pub fn from_drm_device(drm: &Drm) -> Result<Self, RenderError> {
|
||||
let drm_dev = drm.get_device()?;
|
||||
let node = match drm_dev.nodes().find(|(ty, _)| *ty == DRM_NODE_RENDER) {
|
||||
let nodes = drm.get_nodes()?;
|
||||
let node = match nodes.get(&NodeType::Render) {
|
||||
None => return Err(RenderError::NoRenderNode),
|
||||
Some((_, n)) => Rc::new(n.to_owned()),
|
||||
Some(path) => Rc::new(path.to_owned()),
|
||||
};
|
||||
let egl_dev = match find_drm_device(&drm_dev)? {
|
||||
let egl_dev = match find_drm_device(&nodes)? {
|
||||
Some(d) => d,
|
||||
None => return Err(RenderError::UnknownDrmDevice),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ use crate::render::renderer::renderer::Renderer;
|
|||
use crate::render::sys::{glBlendFunc, GL_ONE, GL_ONE_MINUS_SRC_ALPHA};
|
||||
use crate::tree::Node;
|
||||
use crate::State;
|
||||
use std::fmt::{Debug, Formatter};
|
||||
use std::ptr;
|
||||
use std::rc::Rc;
|
||||
|
||||
|
|
@ -16,6 +17,12 @@ pub struct Framebuffer {
|
|||
pub(super) gl: GlFrameBuffer,
|
||||
}
|
||||
|
||||
impl Debug for Framebuffer {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
f.debug_struct("Framebuffer").finish_non_exhaustive()
|
||||
}
|
||||
}
|
||||
|
||||
impl Framebuffer {
|
||||
pub fn render(&self, node: &dyn Node, state: &State, cursor_rect: Option<Rect>) {
|
||||
let _ = self.ctx.ctx.with_current(|| {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue