#include "graphics.h" #include "sprites.h" static ksys_colors_table_t sys_color_table; static ksys_pos_t win_pos; static Image* screenImage; static Image* spriteAtlas; void graphicsInit() { win_pos = _ksys_get_mouse_pos(KSYS_MOUSE_SCREEN_POS); _ksys_get_system_colors(&sys_color_table); spriteAtlas = img_decode((void*)sprites100, sizeof(sprites100), 0); *((uint8_t*)spriteAtlas->Palette + 3) = 0; // set black as transparent // for (int i = 0; i < 16; i++) { // debug_printf("%x\n", *((uint8_t*)spriteAtlas->Palette + i)); // } if (spriteAtlas->Type != IMAGE_BPP32) { spriteAtlas = img_convert(spriteAtlas, NULL, IMAGE_BPP32, 0, 0); if (!spriteAtlas) { debug_printf("spriteAtlas convert error\n"); exit(-1); } } debug_printf("spriteAtlas->Type = %d\n", spriteAtlas->Type); screenImage = img_create(DEFAULT_WIDTH, 200, IMAGE_BPP32); } void graphicsBlitAtlasImage(int atlasX, int atlasY, int destX, int destY, int w, int h, bool center) { // debug_printf("start graphicsBlitAtlasImage %d %d %d %d %d %d %x %x\n", atlasX, atlasY, destX, destY, w, h, screenImage, spriteAtlas); if (destX < 0 || destY < 0) { return; } img_blend(screenImage, spriteAtlas, destX, destY, atlasX, atlasY, w, h); // debug_printf("end graphicsBlitAtlasImage\n\n"); } void graphicsFillBackground(unsigned r, unsigned g, unsigned b) { img_fill_color(screenImage, screenImage->Width, screenImage->Height, (0xFF << 24) | (r << 16) | (g << 8) | b); } void graphicsRender() { _ksys_start_draw(); _ksys_create_window(win_pos.x, win_pos.y, screenImage->Width + 10, screenImage->Height + 29, "DINO", sys_color_table.work_area, 0x54); // 0x54. note: C = 1 !! img_draw(screenImage, 5, 24, screenImage->Width, screenImage->Height, 0, 0); //ksys_draw_bitmap_palette(screenImage->Data, 5, 24, screenImage->Width, screenImage->Height, 32, 0, 0); // ksys_blitter_params_t bp = {5, 24, screenImage->Width, screenImage->Height, 0, 0, screenImage->Width, screenImage->Height, screenImage->Data, screenImage->Width*4}; // _ksys_blitter(0, &bp); _ksys_end_draw(); } void graphicsDelay(int ms) { // debug_printf("ms = %d\n", ms); _ksys_delay(ms/10 ? ms/10 : 2); } void graphicsDestroy() { img_destroy(screenImage); img_destroy(spriteAtlas); }