📄 tl_video.c
字号:
/*** thinlib (c) 2001 Matthew Conte (matt@conte.com)****** tl_video.h**** thinlib video routines**** $Id: $*/#include "tl_types.h"#include "tl_video.h"#include "tl_vesa.h"#include "tl_vga.h"#include "tl_log.h"typedef struct viddriver_s{ const char *name; int (*init)(int width, int height, int bpp, int param); void (*shutdown)(void); int (*setmode)(int width, int height, int bpp); void (*setpalette)(rgb_t *palette, int index, int length); void (*waitvsync)(void); bitmap_t *(*lock)(void); void (*free)(int num_dirties, rect_t *dirty_rects); void (*blit)(bitmap_t *primary, int num_dirties, rect_t *dirty_rects); int caps;} viddriver_t;static viddriver_t vesa ={ "VESA 3.0 LFB", thin_vesa_init, thin_vesa_shutdown, thin_vesa_setmode, thin_vga_setpalette, thin_vga_waitvsync, thin_vesa_lockwrite, thin_vesa_freewrite, NULL, 0,};static viddriver_t vga ={ "VGA", thin_vga_init, thin_vga_shutdown, thin_vga_setmode, thin_vga_setpalette, thin_vga_waitvsync, thin_vga_lockwrite, thin_vga_freewrite, NULL, 0, /*THIN_VIDEO_SCANLINES,*/};static viddriver_t *driver_list[] = { &vesa, &vga, NULL};static viddriver_t driver;int thin_vid_init(int width, int height, int bpp, int param){ /* cascade driver checks by iterating through all drivers */ viddriver_t **iter; for (iter = driver_list; *iter != NULL; iter++) { if (0 == (*iter)->init(width, height, bpp, param)) { driver = **iter; return 0; } } driver.name = NULL; thin_printf("thinlib.video: could not find any matching video modes.\n"); return -1;}void thin_vid_shutdown(void){ if (NULL != driver.name) { driver.shutdown(); memset(&driver, 0, sizeof(viddriver_t)); }}int thin_vid_getcaps(void){ return driver.caps;}int thin_vid_setmode(int width, int height, int bpp){ if (driver.setmode(width, height, bpp)) { thin_printf("thinlib.video: could not set %s video mode %dx%d %dbpp\n", driver.name, width, height, bpp); return -1; } return 0;}void thin_vid_setpalette(rgb_t *palette, int index, int length){ driver.setpalette(palette, index, length);}bitmap_t *thin_vid_lockwrite(void){ return driver.lock();}void thin_vid_freewrite(int num_dirties, rect_t *dirty_rects){ if (NULL != driver.free) driver.free(num_dirties, dirty_rects);}void thin_vid_customblit(bitmap_t *primary, int num_dirties, rect_t *dirty_rects){ THIN_ASSERT(driver.blit); driver.blit(primary, num_dirties, dirty_rects);}/*** $Log: $*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -