diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-30 15:02:26 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-30 15:02:26 +0200 |
commit | 915dd4b023d0826166d4887100dbed64d46821a9 (patch) | |
tree | 7803f23f045e3bf9cb70c7430be3b304212f660f /src/kernel | |
parent | d2af238397ab523b2c1ba7d24875a186b4a8acc6 (diff) | |
download | abaos-915dd4b023d0826166d4887100dbed64d46821a9.tar.gz abaos-915dd4b023d0826166d4887100dbed64d46821a9.tar.bz2 |
playing with Z buffering in VGA driver
Diffstat (limited to 'src/kernel')
-rw-r--r-- | src/kernel/kernel.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 197f491..aacfcbd 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -139,7 +139,7 @@ void kernel_main( void ) // for now we are only interested in interrupts, // so we let the main thread sleep instead of // burning CPU.. - kernel_halt( ); +// kernel_halt( ); switch( global_context.mode ) { case MODE_TEXT: @@ -153,11 +153,13 @@ void kernel_main( void ) // wait for VGA retrace, assume drawing the desktop // is fast enough to finish in time (so we don't recheck // for retrace) - vga_wait_for_retrace( &global_context.vga ); +// vga_wait_for_retrace( &global_context.vga ); // as vga_t is equals to the graphical context for now ((widget_vtable_t *)global_context.desktop.vtable)->draw( &global_context.desktop, &global_context.vga ); + vga_refresh( &global_context.vga ); + interrupts_enable( ); break; @@ -242,14 +244,21 @@ static void handle_keyboard_event( keyboard_event_t *event, void *context ) } *p = '\0'; - window_init( &global_context->window3, (widget_t *)&global_context->desktop, 55, 5, vga->mode.x - 65, 100, VGA_COLOR_WHITE ); + window_init( &global_context->window3, (widget_t *)&global_context->desktop, 55, 5, vga->mode.x - 65, 100, VGA_COLOR_CYAN ); ((composite_widget_vtable_t *)global_context->desktop.vtable)->add_child( &global_context->desktop, (widget_t *)&global_context->window3 ); -// text_widget_init( &global_context->widget3, (widget_t *)&global_context->window3, 1, 1, global_context->window3.base.base.w - 2, global_context->window3.base.base.h - 2, VGA_COLOR_RED, s ); + text_widget_init( &global_context->widget3, (widget_t *)&global_context->window3, 1, 1, global_context->window3.base.base.w - 2, global_context->window3.base.base.h - 2, VGA_COLOR_RED, s ); // ((composite_widget_vtable_t *)global_context->window3.vtable)->add_child( (composite_widget_t *)&global_context->window3, (widget_t *)&global_context->widget3 ); mouse_set_resolution( mouse, vga->mode.x, vga->mode.y ); } + + // enable Z buffering + vga_use_z_buffer( &global_context->vga, true ); + + // draw on mode switch + ((widget_vtable_t *)global_context->desktop.vtable)->draw( &global_context->desktop, &global_context->vga ); + global_context->mode = MODE_GRAPHICS; break; @@ -325,6 +334,11 @@ static void handle_mouse_event( mouse_event_t *event, void *context ) break; } + // alternative way of redrawing on mouse event + // on qemu looses the mouse.. +// interrupts_disable( ); +// ((widget_vtable_t *)desktop->vtable)->draw( &global_context->desktop, &global_context->vga ); +// interrupts_enable( ); break; } |