e2272c0ed3
renaser —kernel asíncrono de espacio de direcciones único, no-POSIX, `no_std` x86_64— entra al monorepo como su PROPIO workspace de Cargo, no fusionado: usa toolchain nightly, target `x86_64-unknown-none` y `panic = "abort"`, incompatibles con los perfiles globales de brahman. - `renaser/` — copia del proyecto (sin su `.git`; el repo original conserva su historia standalone). Workspace propio con su `rust-toolchain.toml` y `.cargo/`. - `exclude = ["renaser"]` en el workspace de brahman: Cargo lo trata como ajeno. - El kernel de renaser path-depende `mirada-layout` cruzando la frontera de workspace — primer núcleo compartido. Semilla de la Fase 8 (compositor): geometría de teselado compartida, framebuffer nativo de renaser; smithay se queda en el lado Linux. Verificado: `cargo build -p boot` compila kernel + imagen UEFI con mirada-layout enlazado para bare-metal. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
37 lines
1.5 KiB
Rust
37 lines
1.5 KiB
Rust
// =============================================================================
|
|
// renaser :: kernel/src/texto.rs — Fase 3 :: el texto como caso del dibujo
|
|
// -----------------------------------------------------------------------------
|
|
// Con el heap activo, el texto deja de ser un mapa de bits estatico. Una
|
|
// tipografia vectorial se empotra en el binario y se rasteriza glifo a glifo,
|
|
// bajo demanda: el texto se vuelve, literalmente, un caso particular del
|
|
// dibujo — la promesa fundacional de renaser.
|
|
// =============================================================================
|
|
|
|
use alloc::vec::Vec;
|
|
|
|
use fontdue::{Font, FontSettings, Metrics};
|
|
use spin::Once;
|
|
|
|
/// La tipografia vectorial, empotrada en el propio binario del kernel.
|
|
static FUENTE_TTF: &[u8] = include_bytes!("../assets/font.ttf");
|
|
|
|
/// La fuente ya analizada. Se funde una sola vez, tras activar el heap.
|
|
static FUENTE: Once<Font> = Once::new();
|
|
|
|
/// Analiza la tipografia empotrada. Requiere el heap ya activo.
|
|
pub fn init() {
|
|
FUENTE.call_once(|| {
|
|
Font::from_bytes(FUENTE_TTF, FontSettings::default())
|
|
.expect("renaser :: la tipografia empotrada es invalida")
|
|
});
|
|
}
|
|
|
|
/// Rasteriza un glifo al vuelo: devuelve sus metricas de colocacion y un mapa
|
|
/// de cobertura (un byte de opacidad, 0..=255, por cada pixel del glifo).
|
|
pub fn rasterizar(caracter: char, tam_px: f32) -> (Metrics, Vec<u8>) {
|
|
FUENTE
|
|
.get()
|
|
.expect("renaser :: la tipografia no fue fundida")
|
|
.rasterize(caracter, tam_px)
|
|
}
|