main graphics loop

master
Able 2022-02-12 23:17:17 -06:00
parent a0f220d597
commit 45e7fa7e05
Signed by untrusted user: able
GPG Key ID: D164AF5F5700BE51
3 changed files with 26 additions and 5 deletions

View File

@ -34,8 +34,8 @@ run-args = [
"-drive",
"file=disk.qcow2,if=none,id=drive0",
# "-qmp",
# "unix:../qmp-sock,server,nowait"
"-qmp",
"unix:../qmp-sock,server,nowait"
]

View File

@ -3,7 +3,7 @@ use ab_glyph::{Font, FontRef, Glyph};
use alloc::{boxed::Box, vec, vec::Vec};
use shadeable::{evaluate_shader, pixel_format::Rgba64};
use spin;
use vga::writers::GraphicsWriter;
use vga::{colors::Color16, writers::GraphicsWriter};
#[derive(Debug)]
pub struct ScreenSize {
@ -127,7 +127,7 @@ impl ScreenBuffer {
// TODO force clear
pub fn force_redraw(&mut self) {
use shadeable::pixel_format::into_vga_16;
VGAE.lock().clear_screen(into_vga_16(self.clear_color));
VGAE.lock().clear_screen(vga::colors::Color16::Black);
}
/// Draw a glyph on the screen at the given position
@ -211,8 +211,9 @@ impl VgaBuffer for ScreenBuffer {
for x in 0..self.size.x {
use shadeable::pixel_format::into_vga_16;
let vga_color = into_vga_16(self.buff[y * self.size.x + x]);
// let vga_color = vga::colors::Color16::Cyan;
if into_vga_16(self.clear_color) != vga_color {
if Color16::Cyan != vga_color {
mode.set_pixel(x, y, vga_color);
}
}

View File

@ -1,6 +1,7 @@
#![allow(clippy::empty_loop)]
use acpi::AcpiTables;
use x86_64::instructions::interrupts::{disable, enable};
use crate::scratchpad;
@ -86,6 +87,25 @@ pub fn kernel_main() -> ! {
start_facepalm();
scratchpad();
loop {
disable();
let mut mode = SCREEN_BUFFER.lock();
mode.force_redraw();
mode.copy_to_buffer();
mode.clear();
mode.draw_char(0, 0, 'v', 0xff00ffff);
mode.copy_to_buffer();
drop(mode);
enable()
// sloop::halt();
}
// }
sloop()
}