mirror of
https://github.com/Oibaf66/uae-wii.git
synced 2024-06-03 00:58:47 +02:00
124 lines
4.1 KiB
C
124 lines
4.1 KiB
C
/*
|
|
* UAE - The Un*x Amiga Emulator
|
|
*
|
|
* Interface to the graphics system (X, SVGAlib)
|
|
*
|
|
* Copyright 1995-1997 Bernd Schmidt
|
|
* Copyright 2005 Richard Drummond
|
|
*/
|
|
|
|
typedef uae_u32 xcolnr;
|
|
|
|
typedef int (*allocfunc_type)(int, int, int, xcolnr *);
|
|
|
|
extern xcolnr xcolors[4096];
|
|
|
|
extern int debuggable (void);
|
|
extern void togglemouse (void);
|
|
extern void LED (int);
|
|
extern void screenshot (int);
|
|
|
|
extern int bits_in_mask (unsigned long mask);
|
|
extern int mask_shift (unsigned long mask);
|
|
extern unsigned int doMask (int p, int bits, int shift);
|
|
extern unsigned int doMask256 (int p, int bits, int shift);
|
|
extern void setup_maxcol (int);
|
|
extern void alloc_colors256 (int (*)(int, int, int, xcolnr *));
|
|
extern void alloc_colors64k (int, int, int, int, int, int, int, int, int, int);
|
|
extern void setup_greydither (int bits, allocfunc_type allocfunc);
|
|
extern void setup_greydither_maxcol (int maxcol, allocfunc_type allocfunc);
|
|
extern void setup_dither (int bits, allocfunc_type allocfunc);
|
|
extern void DitherLine (uae_u8 *l, uae_u16 *r4g4b4, int x, int y, uae_s16 len, int bits) ASM_SYM_FOR_FUNC("DitherLine");
|
|
|
|
|
|
|
|
struct vidbuf_description
|
|
{
|
|
/* Function implemented by graphics driver */
|
|
void (*flush_line) (struct vidbuf_description *gfxinfo, int line_no);
|
|
void (*flush_block) (struct vidbuf_description *gfxinfo, int first_line, int end_line);
|
|
void (*flush_screen) (struct vidbuf_description *gfxinfo, int first_line, int end_line);
|
|
void (*flush_clear_screen) (struct vidbuf_description *gfxinfo);
|
|
int (*lockscr) (struct vidbuf_description *gfxinfo);
|
|
void (*unlockscr) (struct vidbuf_description *gfxinfo);
|
|
|
|
/* The graphics code has a choice whether it wants to use a large buffer
|
|
* for the whole display, or only a small buffer for a single line.
|
|
* If you use a large buffer:
|
|
* - set bufmem to point at it
|
|
* - set linemem to 0
|
|
* - if memcpy within bufmem would be very slow, i.e. because bufmem is
|
|
* in graphics card memory, also set emergmem to point to a buffer
|
|
* that is large enough to hold a single line.
|
|
* - implement flush_line to be a no-op.
|
|
* If you use a single line buffer:
|
|
* - set bufmem and emergmem to 0
|
|
* - set linemem to point at your buffer
|
|
* - implement flush_line to copy a single line to the screen
|
|
*/
|
|
uae_u8 *bufmem;
|
|
uae_u8 *realbufmem;
|
|
uae_u8 *linemem;
|
|
uae_u8 *emergmem;
|
|
int rowbytes; /* Bytes per row in the memory pointed at by bufmem. */
|
|
int pixbytes; /* Bytes per pixel. */
|
|
int width;
|
|
int height;
|
|
int maxblocklines; /* Set to 0 if you want calls to flush_line after each drawn line, or the number of
|
|
* lines that flush_block wants to/can handle (it isn't really useful to use another
|
|
* value than maxline here). */
|
|
};
|
|
|
|
#define MAXBLOCKLINES_MAX INT_MAX;
|
|
|
|
extern struct vidbuf_description gfxvidinfo;
|
|
|
|
|
|
|
|
STATIC_INLINE void flush_line (int line_no)
|
|
{
|
|
gfxvidinfo.flush_line (&gfxvidinfo, line_no);
|
|
}
|
|
|
|
STATIC_INLINE void flush_block (int first_line, int last_line)
|
|
{
|
|
gfxvidinfo.flush_block (&gfxvidinfo, first_line, last_line);
|
|
}
|
|
|
|
STATIC_INLINE void flush_screen (int first_line, int last_line)
|
|
{
|
|
gfxvidinfo.flush_screen (&gfxvidinfo, first_line, last_line);
|
|
}
|
|
|
|
STATIC_INLINE void flush_clear_screen (void)
|
|
{
|
|
gfxvidinfo.flush_clear_screen (&gfxvidinfo);
|
|
}
|
|
|
|
STATIC_INLINE int lockscr (void)
|
|
{
|
|
return gfxvidinfo.lockscr (&gfxvidinfo);
|
|
}
|
|
|
|
STATIC_INLINE void unlockscr (void)
|
|
{
|
|
gfxvidinfo.unlockscr (&gfxvidinfo);
|
|
}
|
|
|
|
extern int graphics_setup (void);
|
|
extern void graphics_leave (void);
|
|
extern int graphics_init (void);
|
|
extern int graphics_open (void);
|
|
extern void graphics_close (void);
|
|
extern void graphics_notify_state (int state);
|
|
extern void handle_events (void);
|
|
extern int is_fullscreen (void);
|
|
extern int is_vsync (void);
|
|
extern void toggle_fullscreen (void);
|
|
extern void toggle_mousegrab (void);
|
|
|
|
|
|
/* For ports using tui.c, this should be built by graphics_setup(). */
|
|
extern struct bstring *video_mode_menu;
|
|
extern void vidmode_menu_selected(int);
|