19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCopyright (C) 1996-1997 Id Software, Inc.
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is free software; you can redistribute it and/or
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreammodify it under the terms of the GNU General Public License
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamas published by the Free Software Foundation; either version 2
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamof the License, or (at your option) any later version.
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is distributed in the hope that it will be useful,
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambut WITHOUT ANY WARRANTY; without even the implied warranty of
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSee the GNU General Public License for more details.
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamYou should have received a copy of the GNU General Public License
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamalong with this program; if not, write to the Free Software
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// vid.h -- video driver defs
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define VID_CBITS	6
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define VID_GRADES	(1 << VID_CBITS)
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// a pixel can be one, two, or four bytes
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef byte pixel_t;
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct vrect_s
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int				x,y,width,height;
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct vrect_s	*pnext;
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} vrect_t;
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pixel_t			*buffer;		// invisible buffer
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pixel_t			*colormap;		// 256 * VID_GRADES size
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned short	*colormap16;	// 256 * VID_GRADES size
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int				fullbright;		// index of first fullbright color
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned		rowbytes;	// may be > width if displayed in a window
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned		width;
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned		height;
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float			aspect;		// width / height -- < 0 is taller than wide
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int				numpages;
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int				recalc_refdef;	// if true, recalc vid-based stuff
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pixel_t			*conbuffer;
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int				conrowbytes;
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned		conwidth;
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned		conheight;
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int				maxwarpwidth;
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int				maxwarpheight;
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pixel_t			*direct;		// direct drawing to framebuffer, if not
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream									//  NULL
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} viddef_t;
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	viddef_t	vid;				// global video state
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	unsigned short	d_8to16table[256];
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	unsigned	d_8to24table[256];
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern void (*vid_menudrawfn)(void);
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern void (*vid_menukeyfn)(int key);
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	VID_SetPalette (unsigned char *palette);
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// called at startup and after any gamma correction
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	VID_ShiftPalette (unsigned char *palette);
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// called for bonus and pain flashes, and for underwater color changes
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	VID_Init (unsigned char *palette);
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// Called at startup to set up translation tables, takes 256 8 bit RGB values
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the palette data will go away after the call, so it must be copied off if
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// the video driver will need it again
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	VID_Shutdown (void);
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// Called at shutdown
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid	VID_Update (vrect_t *rects);
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// flushes the given rectangles from the view buffer to the screen
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint VID_SetMode (int modenum, unsigned char *palette);
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// sets the mode; only used by the Quake engine for resetting to mode 0 (the
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// base mode) on memory allocation failures
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid VID_HandlePause (qboolean pause);
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// called only on Win32, when pause happens, so the mouse can be released
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
86