fix(mirada-compositor): backend DRM — modo de mayor área + log de modos
El borde negro seguía: la marca PREFERRED del panel no es fiable (a veces apunta a un modo menor). Ahora se elige el modo de mayor área (a igualdad, mayor refresco), y se registran todos los modos del conector para diagnóstico. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -263,17 +263,25 @@ pub fn run() -> Result<(), Box<dyn Error>> {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let name = format!("{:?}-{}", conn.interface(), conn.interface_id());
|
let name = format!("{:?}-{}", conn.interface(), conn.interface_id());
|
||||||
// El modo: el marcado PREFERRED (el nativo del panel) y, si no
|
// Registra todos los modos del panel — diagnóstico.
|
||||||
// hay ninguno marcado, el de mayor área. `modes()[0]` no sirve —
|
for m in conn.modes() {
|
||||||
// suele ser un modo menor (p. ej. 1920×1080 en un panel 16:10).
|
let (mw, mh) = m.size();
|
||||||
|
let pref = if m.mode_type().contains(ModeTypeFlags::PREFERRED) {
|
||||||
|
" [PREFERRED]"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
};
|
||||||
|
eprintln!(" modo de «{name}»: {mw}×{mh} @ {} Hz{pref}", m.vrefresh());
|
||||||
|
}
|
||||||
|
// Elige el modo de mayor área (a igualdad, mayor refresco) — el
|
||||||
|
// nativo del panel. La marca PREFERRED no es fiable: a veces
|
||||||
|
// señala un modo menor.
|
||||||
let mode = conn
|
let mode = conn
|
||||||
.modes()
|
.modes()
|
||||||
.iter()
|
.iter()
|
||||||
.find(|m| m.mode_type().contains(ModeTypeFlags::PREFERRED))
|
.max_by_key(|m| {
|
||||||
.or_else(|| {
|
let (mw, mh) = m.size();
|
||||||
conn.modes()
|
(mw as u32 * mh as u32, m.vrefresh())
|
||||||
.iter()
|
|
||||||
.max_by_key(|m| m.size().0 as u32 * m.size().1 as u32)
|
|
||||||
})
|
})
|
||||||
.copied();
|
.copied();
|
||||||
let Some(mode) = mode else {
|
let Some(mode) = mode else {
|
||||||
|
|||||||
Reference in New Issue
Block a user