diff options
Diffstat (limited to 'src/emu/video.h')
-rw-r--r-- | src/emu/video.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/emu/video.h b/src/emu/video.h new file mode 100644 index 00000000000..da602318588 --- /dev/null +++ b/src/emu/video.h @@ -0,0 +1,169 @@ +/*************************************************************************** + + video.h + + Core MAME video routines. + + Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team. + Visit http://mamedev.org for licensing and usage restrictions. + +***************************************************************************/ + +#pragma once + +#ifndef __VIDEO_H__ +#define __VIDEO_H__ + +#include "mamecore.h" +#include "timer.h" + + +/*************************************************************************** + CONSTANTS +***************************************************************************/ + +/* maximum number of screens for one game */ +#define MAX_SCREENS 8 + +/* number of levels of frameskipping supported */ +#define FRAMESKIP_LEVELS 12 +#define MAX_FRAMESKIP (FRAMESKIP_LEVELS - 2) + + + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +/*------------------------------------------------- + screen_state - current live state of a screen +-------------------------------------------------*/ + +typedef struct _screen_state screen_state; +struct _screen_state +{ + int width, height; /* total width/height (HTOTAL, VTOTAL) */ + rectangle visarea; /* visible area (HBLANK end/start, VBLANK end/start) */ + UINT8 oldstyle_vblank_supplied; /* MDRV_SCREEN_VBLANK_TIME macro used */ + attoseconds_t refresh; /* refresh period */ + attoseconds_t vblank; /* duration of a VBLANK */ + bitmap_format format; /* bitmap format */ +}; + + +/*------------------------------------------------- + screen_config - configuration of a single + screen +-------------------------------------------------*/ + +typedef struct _screen_config screen_config; +struct _screen_config +{ + const char * tag; /* nametag for the screen */ + UINT32 palette_base; /* base palette entry for this screen */ + screen_state defstate; /* default state */ + float xoffset, yoffset; /* default X/Y offsets */ + float xscale, yscale; /* default X/Y scale factor */ +}; + + + +/*************************************************************************** + FUNCTION PROTOTYPES +***************************************************************************/ + +/* ----- core implementation ----- */ + +/* core initialization */ +void video_init(running_machine *machine); + +/* core VBLANK callback */ +void video_vblank_start(running_machine *machine); + + +/* ----- screen management ----- */ + +/* set the resolution of a screen */ +void video_screen_configure(int scrnum, int width, int height, const rectangle *visarea, attoseconds_t refresh); + +/* set the visible area of a screen; this is a subset of video_screen_configure */ +void video_screen_set_visarea(int scrnum, int min_x, int max_x, int min_y, int max_y); + +/* force a partial update of the screen up to and including the requested scanline */ +void video_screen_update_partial(int scrnum, int scanline); + +/* return the current vertical or horizontal position of the beam for a screen */ +int video_screen_get_vpos(int scrnum); +int video_screen_get_hpos(int scrnum); + +/* return the current vertical or horizontal blanking state for a screen */ +int video_screen_get_vblank(int scrnum); +int video_screen_get_hblank(int scrnum); + +/* return the time when the beam will reach a particular H,V position */ +attotime video_screen_get_time_until_pos(int scrnum, int vpos, int hpos); + +/* return the amount of time the beam takes to draw one scan line */ +attotime video_screen_get_scan_period(int scrnum); + +/* return the amount of time the beam takes to draw one complete frame */ +attotime video_screen_get_frame_period(int scrnum); + +/* returns whether a given screen exists */ +int video_screen_exists(int scrnum); + + + +/* ----- global rendering ----- */ + +/* update the screen, handling frame skipping and rendering */ +void video_frame_update(void); + + +/* ----- throttling/frameskipping/performance ----- */ + +/* are we skipping the current frame? */ +int video_skip_this_frame(void); + +/* get/set the speed factor as an integer * 100 */ +int video_get_speed_factor(void); +void video_set_speed_factor(int speed); + +/* return text to display about the current speed */ +const char *video_get_speed_text(void); + +/* get/set the current frameskip (-1 means auto) */ +int video_get_frameskip(void); +void video_set_frameskip(int frameskip); + +/* get/set the current throttle */ +int video_get_throttle(void); +void video_set_throttle(int throttle); + +/* get/set the current fastforward state */ +int video_get_fastforward(void); +void video_set_fastforward(int fastforward); + + +/* ----- snapshots ----- */ + +/* save a snapshot of a given screen */ +void video_screen_save_snapshot(running_machine *machine, mame_file *fp, int scrnum); + +/* save a snapshot of all the active screens */ +void video_save_active_screen_snapshots(running_machine *machine); + + +/* ----- movie recording ----- */ + +/* Movie recording */ +int video_is_movie_active(running_machine *machine, int scrnum); +void video_movie_begin_recording(running_machine *machine, int scrnum, const char *name); +void video_movie_end_recording(running_machine *machine, int scrnum); + + +/* ----- crosshair rendering ----- */ + +void video_crosshair_toggle(void); + +#endif /* __VIDEO_H__ */ |