extern "C" {
#include <ubixos/schedule.h>
#include <sys/video.h>
#include <vmm/paging.h>
#include <lib/kmalloc.h>
#include <lib/bioscall.h>
}
#include <sde/sde.h>
#include <objgfx/objgfx30.h>
#include <sde/ogDisplay_UbixOS.h>
extern "C" void sdeThread() {
ogSurface *screen = new ogDisplay_UbixOS();
struct sdeWindows *tmp = 0x0;
ogSurface *buf = 0x0;
screen->ogCreate(640,480,OG_PIXFMT_16BPP);
screen->ogClear(screen->ogRGB(63,63,63));
while (1) {
for (tmp = windows;tmp;tmp=tmp->next) {
switch (tmp->status) {
case registerWindow:
buf = (ogSurface *)tmp->buf;
buf->buffer = mapFromTask(tmp->pid,buf->buffer,buf->bSize);
buf->lineOfs = (uInt32 *)mapFromTask(tmp->pid,buf->lineOfs,buf->lSize);
tmp->status = windowReady;
kprintf("Window Registered!\n");
break;
case drawWindow:
kprintf("Draw Window Routines Here\n");
buf = (ogSurface *)tmp->buf;
screen->ogCopy(*buf);
tmp->status = windowReady;
break;
case killWindow:
kprintf("Killed Window\n");
if (tmp->next != 0x0) {
tmp->next->prev = tmp->prev;
if (tmp->prev != 0x0)
tmp->prev->next = tmp->next;
}
else if (tmp->prev != 0x0) {
tmp->prev->next = tmp->next;
if (tmp->next != 0x0)
tmp->next->prev = tmp->prev;
}
else {
windows = 0x0;
}
unmapPages(buf->buffer,buf->bSize);
unmapPages(buf->lineOfs,buf->lSize);
// kfree(tmp->buf);
kfree(tmp);
tmp = 0x0;
break;
default:
break;
}
}
sched_yield();
}
}