roo_e/thirdparty/grx249/include/grdriver.h
2022-05-16 17:59:47 -05:00

202 lines
8.3 KiB
C

/**
** grdriver.h ---- utilities for frame buffer and video card drivers
**
** Copyright (c) 1995 Csaba Biegl, 820 Stirrup Dr, Nashville, TN 37221
** [e-mail: csaba@vuse.vanderbilt.edu]
**
** This file is part of the GRX graphics library.
**
** The GRX graphics library is free software; you can redistribute it
** and/or modify it under some conditions; see the "copying.grx" file
** for details.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**
**/
#ifndef __GRDRIVER_H_INCLUDED__
#define __GRDRIVER_H_INCLUDED__
#ifndef __GRX20_H_INCLUDED__
#include "grx20.h"
#endif
/*
** The following definitions shouldn't be used in portable
** or binary distributed programs for compatibility with
** future versions of GRX
*/
#ifdef USE_GRX_INTERNAL_DEFINITIONS
/*
* Video mode flag bits (in the 'GrVideoModeExt' structure)
*/
#define GR_VMODEF_LINEAR 1 /* uses linear memory mapping */
#define GR_VMODEF_ACCEL 2 /* it is an accelerated mode */
#define GR_VMODEF_FAST_SVGA8 4 /* use faster mixed linear-planar access */
#define GR_VMODEF_MEMORY 8 /* virtual screen, memory only mode */
extern GrFrameDriver
/*
* Standard frame drivers in GRX
*/
_GrFrameDriverHERC1, /* Hercules mono */
_GrFrameDriverEGAVGA1, /* EGA VGA mono */
_GrFrameDriverEGA4, /* EGA 16 color */
_GrFrameDriverSVGA4, /* (Super) VGA 16 color */
_GrFrameDriverSVGA8, /* (Super) VGA 256 color */
_GrFrameDriverVGA8X, /* VGA 256 color mode X */
_GrFrameDriverSVGA16, /* Super VGA 32768/65536 color */
_GrFrameDriverSVGA24, /* Super VGA 16M color */
_GrFrameDriverSVGA32L, /* Super VGA 16M color padded #1 */
_GrFrameDriverSVGA32H, /* Super VGA 16M color padded #2 */
/* Linear Framebuffer Modes : */
_GrFrameDriverSVGA8_LFB, /* (Super) VGA 256 color */
_GrFrameDriverSVGA16_LFB, /* Super VGA 32768/65536 color */
_GrFrameDriverSVGA24_LFB, /* Super VGA 16M color */
_GrFrameDriverSVGA32L_LFB, /* Super VGA 16M color padded #1 */
_GrFrameDriverSVGA32H_LFB, /* Super VGA 16M color padded #2 */
_GrFrameDriverXWIN8, /* X 8 bpp */
_GrFrameDriverXWIN16, /* X 16 bpp */
_GrFrameDriverXWIN24, /* X 24 bpp */
_GrFrameDriverXWIN32L, /* X 32 bpp padded #1 */
_GrFrameDriverXWIN32H, /* X 32 bpp padded #2 */
_GrFrameDriverWIN32_4, /* WIN32 4 bpp */
_GrFrameDriverWIN32_8, /* WIN32 8 bpp */
_GrFrameDriverWIN32_24, /* WIN32 24 bpp */
_GrFrameDriverSDL8, /* SDL 8 bpp */
_GrFrameDriverSDL16, /* SDL 16 bpp */
_GrFrameDriverSDL24, /* SDL 24 bpp */
_GrFrameDriverSDL32L, /* SDL 32 bpp padded #2 */
_GrFrameDriverSDL32H, /* SDL 32 bpp padded #2 */
_GrFrameDriverRAM1, /* mono */
_GrFrameDriverRAM4, /* 16 color planar */
_GrFrameDriverRAM8, /* 256 color */
_GrFrameDriverRAM16, /* 32768/65536 color */
_GrFrameDriverRAM24, /* 16M color */
_GrFrameDriverRAM32L, /* 16M color padded #1 */
_GrFrameDriverRAM32H, /* 16M color padded #2 */
_GrFrameDriverRAM3x8, /* 16M color planar (image mode) */
/*
* This is a NULL-terminated table of frame driver descriptor pointers. Users
* can provide their own table with only the desired (or additional) drivers.
* Otherwise the table from the GRX library is linked, which includes ALL
* currently available drivers (i.e. the ones above).
*/
*_GrFrameDriverTable[];
extern GrVideoDriver
/*
* Standard video drivers in GRX
*/
_GrVideoDriverHERC, /* Hercules driver */
_GrVideoDriverSTDEGA, /* standard EGA driver */
_GrVideoDriverSTDVGA, /* standard VGA driver */
_GrVideoDriverVESA, /* generic VESA Super VGA driver */
_GrVideoDriverATI28800, /* ATI 28800 chipset driver */
_GrVideoDriverET4000, /* Tseng ET4000 driver */
_GrVideoDriverCL5426, /* Cirrus 5426 driver */
_GrVideoDriverMACH64, /* ATI MACH64 driver */
_GrVideoDriverS3, /* S3 driver */
_GrVideoDriverXWIN, /* X11 interface */
_GrVideoDriverXF86DGA, /* XFree86 DGA interface */
_GrVideoDriverSVGALIB, /* Linux SVGALIB interface */
_GrVideoDriverLINUXFB, /* Linux framebuffer */
_GrVideoDriverWIN32, /* WIN32 interface */
_GrVideoDriverSDL, /* SDL intrercace */
_GrDriverMEM, /* memory screen driver */
/*
* This is a NULL-terminated table of video driver descriptor pointers. Users
* can provide their own table with only the desired (or additional) drivers.
* Otherwise the table from the GRX library is linked, which includes ALL
* currently available drivers (i.e. the ones above).
*/
*_GrVideoDriverTable[];
/*
* frame driver function types used inside GRX
*/
typedef GrColor (*_GR_readPix)(GrFrame *,int,int);
typedef void (*_GR_drawPix)(int,int,GrColor);
typedef void (*_GR_blitFunc)(GrFrame *dst,int dx,int dy,
GrFrame *src,int x,int y,
int w,int h,GrColor op);
typedef GrColor far *(*_GR_getIndexedScanline)(GrFrame *c,int x,int y,
int w, int *indx);
typedef void (*_GR_putScanline)(int x,int y,int w,
const GrColor far *scl,GrColor op);
/*
* Frame driver utility functions
*/
void _GrFrDrvGenericBitBlt(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvPackedBitBltR2R(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvPackedBitBltR2V(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvPackedBitBltV2R(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvPackedBitBltV2V(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvPackedBitBltR2V_LFB(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvPackedBitBltV2R_LFB(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvPackedBitBltV2V_LFB(GrFrame *dst,int dx,int dy,GrFrame *src,int x,int y,int w,int h,GrColor op);
void _GrFrDrvGenericPutScanline(int x,int y,int w,const GrColor far *scl, GrColor op );
GrColor *_GrFrDrvGenericGetIndexedScanline(GrFrame *c,
int x,int y,int w,
int *indx );
void _GrFrDrvGenericStretchBlt(GrFrame *dst,int dx,int dy,int dw,int dh,
GrFrame *src,int sx,int sy,int sw,int sh,
GrColor op);
/*
* Video driver utility functions
*/
int _GrViDrvDetectEGAVGA(void);
int _GrViDrvDetectVGA(void);
int _GrViDrvDetectEGA(void);
int _GrViDrvInitEGAVGA(char *options);
void _GrViDrvResetEGAVGA(void);
int _GrViDrvGetCurrentEGAVGAmode(void);
int _GrViDrvSetEGAVGAmode(GrVideoMode *mp,int noclear);
int _GrViDrvSetEGAVGAcustomTextMode(GrVideoMode *mp,int noclear);
void _GrViDrvLoadColorEGA4(int c,int r,int g,int b);
void _GrViDrvLoadColorVGA4(int c,int r,int g,int b);
void _GrViDrvLoadColorVGA8(int c,int r,int g,int b);
int _GrViDrvVESAsetVirtualSize(GrVideoMode *md,int w,int h,GrVideoMode *result);
int _GrViDrvVESAvirtualScroll(GrVideoMode *md,int x,int y,int result[2]);
/* for 8 bit color modes:
** normal DAC has 6bit for each rgb color component, VESA 2.0 allows
** 6bit or 8bit DAC color values.
** _GrViDrvLoadColorVGA8() requires 8bit values that will be shifted right:
**
** DAC width 6bit 8bit
** shift 2 0
*/
void _GrViDrvSetDACshift(int shift);
/*
* Commonly used video driver data structures
*/
extern GrVideoModeExt _GrViDrvEGAVGAtextModeExt;
extern GrVideoModeExt _GrViDrvEGAVGAcustomTextModeExt;
GrVideoMode * _gr_selectmode(GrVideoDriver *drv,int w,int h,int bpp,
int txt,unsigned int *ep);
#endif /* USE_GRX_INTERNAL_DEFINITIONS */
#endif /* whole file */