|
|
1.1.1.3 ! root 1: /* 1.1 root 2: * UAE - The Un*x Amiga Emulator 1.1.1.3 ! root 3: * 1.1 root 4: * Interface to the graphics system (X, SVGAlib) 1.1.1.3 ! root 5: * ! 6: * Copyright 1995-1997 Bernd Schmidt 1.1 root 7: */ 8: 9: typedef long int xcolnr; 10: 1.1.1.2 root 11: typedef int (*allocfunc_type)(int, int, int, xcolnr *); 1.1 root 12: 13: extern xcolnr xcolors[4096]; 14: 15: extern int buttonstate[3]; 16: extern int newmousecounters; 17: extern int lastmx, lastmy; 18: 1.1.1.3 ! root 19: extern int graphics_setup(void); 1.1 root 20: extern int graphics_init(void); 21: extern void graphics_leave(void); 22: extern void handle_events(void); 23: extern void setup_brkhandler(void); 24: 25: extern void flush_line(int); 26: extern void flush_block(int, int); 27: extern void flush_screen(int, int); 28: 29: extern int debuggable(void); 30: extern int needmousehack(void); 31: extern void togglemouse(void); 32: extern void LED(int); 33: 34: extern unsigned long doMask(int p, int bits, int shift); 1.1.1.2 root 35: extern void setup_maxcol(int); 1.1 root 36: extern void alloc_colors256(int (*)(int, int, int, xcolnr *)); 37: extern void alloc_colors64k(int, int, int, int, int, int); 38: extern void setup_greydither(int bits, allocfunc_type allocfunc); 1.1.1.2 root 39: extern void setup_greydither_maxcol(int maxcol, allocfunc_type allocfunc); 1.1 root 40: extern void setup_dither(int bits, allocfunc_type allocfunc); 1.1.1.3 ! root 41: extern void DitherLine(uae_u8 *l, uae_u16 *r4g4b4, int x, int y, uae_s16 len, int bits) ASM_SYM_FOR_FUNC("DitherLine"); 1.1 root 42: 43: struct vidbuf_description 44: { 1.1.1.2 root 45: char *bufmem; /* Pointer to either the video memory or an area as large which is used as a buffer. */ 1.1.1.3 ! root 46: char *linemem; /* Pointer to a single line in memory to draw into. If NULL, use bufmem. */ 1.1.1.2 root 47: int rowbytes; /* Bytes per row in the memory pointed at by bufmem. */ 48: int pixbytes; /* Bytes per pixel. */ 1.1.1.3 ! root 49: int width; ! 50: int height; 1.1.1.2 root 51: int maxblocklines; /* Set to 0 if you want calls to flush_line after each drawn line, or the number of 52: * lines that flush_block wants to/can handle (it isn't really useful to use another 53: * value than maxline here). */ 1.1.1.3 ! root 54: int can_double; /* Set if the high part of each entry in xcolors contains the same value ! 55: * as the low part, so that two pixels can be drawn at once. */ 1.1 root 56: }; 57: 58: extern struct vidbuf_description gfxvidinfo; 1.1.1.3 ! root 59: ! 60: /* For ports using tui.c, this should be built by graphics_setup(). */ ! 61: extern struct bstring *video_mode_menu; ! 62: extern void vidmode_menu_selected(int); ! 63: ! 64: /* Some definitions that are useful for multithreaded setups. */ ! 65: ! 66: /* If frame_do_semup is nonzero, custom.c will do a sem_post on frame_sem ! 67: * the next time it checks the contents of inhibit_frame. That way, a ! 68: * thread set a bit in inhibit_frame and wait until custom.c has stopped ! 69: * drawing. ! 70: * gui_sem is currently unused. ! 71: * ihf_sem protects modifications of inhibit_frame. ! 72: */ ! 73: extern uae_sem_t frame_sem, gui_sem, ihf_sem; ! 74: extern volatile int inhibit_frame; ! 75: extern volatile int frame_do_semup; ! 76: ! 77: static __inline__ void set_inhibit_frame (int bit) ! 78: { ! 79: uae_sem_wait (&ihf_sem); ! 80: inhibit_frame |= 1 << bit; ! 81: uae_sem_post (&ihf_sem); ! 82: } ! 83: static __inline__ void clear_inhibit_frame (int bit) ! 84: { ! 85: uae_sem_wait (&ihf_sem); ! 86: inhibit_frame &= ~(1 << bit); ! 87: uae_sem_post (&ihf_sem); ! 88: } ! 89: static __inline__ void toggle_inhibit_frame (int bit) ! 90: { ! 91: uae_sem_wait (&ihf_sem); ! 92: inhibit_frame ^= ~(1 << bit); ! 93: uae_sem_post (&ihf_sem); ! 94: } ! 95:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.