Annotation of hatari/src/includes/screen.h, revision 1.1.1.16

1.1       root        1: /*
1.1.1.5   root        2:   Hatari - screen.h
                      3: 
1.1.1.15  root        4:   This file is distributed under the GNU General Public License, version 2
                      5:   or at your option any later version. Read the file gpl.txt for details.
1.1       root        6: */
                      7: 
1.1.1.5   root        8: #ifndef HATARI_SCREEN_H
                      9: #define HATARI_SCREEN_H
1.1.1.3   root       10: 
                     11: #include <SDL_video.h>    /* for SDL_Surface */
                     12: 
1.1.1.16! root       13: #if WITH_SDL2
        !            14: extern SDL_Window *sdlWindow;
        !            15: static inline int SDL_SetColors(SDL_Surface *surface, SDL_Color *colors,
        !            16:                                 int firstcolor, int ncolors)
        !            17: {
        !            18:        return SDL_SetPaletteColors(surface->format->palette, colors,
        !            19:                                    firstcolor, ncolors);
        !            20: }
        !            21: void SDL_UpdateRects(SDL_Surface *screen, int numrects, SDL_Rect *rects);
        !            22: void SDL_UpdateRect(SDL_Surface *screen, Sint32 x, Sint32 y, Sint32 w, Sint32 h);
        !            23: #define SDL_GRAB_OFF false
        !            24: #define SDL_GRAB_ON true
        !            25: #define SDL_WM_GrabInput SDL_SetRelativeMouseMode
        !            26: #endif
1.1       root       27: 
1.1.1.11  root       28: /* The 'screen' is a representation of the ST video memory     */
                     29: /* taking into account all the border tricks. Data are stored  */
                     30: /* in 'planar' format (1 word per plane) and are then converted        */
                     31: /* to an SDL buffer that will be displayed.                    */
                     32: /* So, all video lines are converted to a unique line of       */
                     33: /* SCREENBYTES_LINE bytes in planar format.                    */
                     34: /* SCREENBYTES_LINE should always be a multiple of 8.          */
                     35: 
                     36: /* left/right borders must be multiple of 8 bytes */
                     37: #define SCREENBYTES_LEFT    (nBorderPixelsLeft/2)  /* Bytes for left border */
                     38: #define SCREENBYTES_MIDDLE  160                    /* Middle (320 pixels) */
                     39: #define SCREENBYTES_RIGHT   (nBorderPixelsRight/2) /* Right border */
1.1.1.10  root       40: #define SCREENBYTES_LINE    (SCREENBYTES_LEFT+SCREENBYTES_MIDDLE+SCREENBYTES_RIGHT)
                     41: #define SCREENBYTES_MONOLINE 80         /* Byte per line in ST-high resolution */
                     42: 
                     43: /* Overscan values */
1.1.1.12  root       44: #define OVERSCAN_TOP         29
                     45: #define MAX_OVERSCAN_BOTTOM  47        /* number of bottom lines to display on screen */
1.1.1.10  root       46: 
                     47: /* Number of visible screen lines including top/bottom borders */
1.1.1.12  root       48: #define NUM_VISIBLE_LINES  (OVERSCAN_TOP+200+MAX_OVERSCAN_BOTTOM)
1.1.1.10  root       49: 
1.1.1.16! root       50: /* Number of visible pixels on each screen line including left/right borders */
        !            51: #define NUM_VISIBLE_LINE_PIXELS (48+320+48)
        !            52: 
1.1.1.13  root       53: /* 1x16 colour palette per screen line, +1 line as may write after line 200 */
1.1.1.14  root       54: #define HBL_PALETTE_LINES ((NUM_VISIBLE_LINES+1 +3 )*16)       /* [NP] FIXME we need to handle 313 hbl, not 310 ; palette code is a mess it should be removed */
1.1.1.13  root       55: /* Bit mask of palette colours changes, top bit set is resolution change */
1.1.1.14  root       56: #define HBL_PALETTE_MASKS (NUM_VISIBLE_LINES+1 +3 )            /* [NP] FIXME we need to handle 313 hbl, not 310 ; palette code is a mess it should be removed */
1.1.1.13  root       57: 
1.1.1.10  root       58: 
1.1       root       59: /* Frame buffer, used to store details in screen conversion */
1.1.1.5   root       60: typedef struct
                     61: {
1.1.1.13  root       62:   Uint16 HBLPalettes[HBL_PALETTE_LINES];
                     63:   Uint32 HBLPaletteMasks[HBL_PALETTE_MASKS];
1.1.1.9   root       64:   Uint8 *pSTScreen;             /* Copy of screen built up during frame (copy each line on HBL to simulate monitor raster) */
                     65:   Uint8 *pSTScreenCopy;         /* Previous frames copy of above  */
                     66:   int OverscanModeCopy;         /* Previous screen overscan mode */
1.1.1.12  root       67:   bool bFullUpdate;             /* Set TRUE to cause full update on next draw */
1.1       root       68: } FRAMEBUFFER;
1.1.1.5   root       69: 
1.1.1.6   root       70: /* Number of frame buffers (1 or 2) - should be 2 for supporting screen flipping */
                     71: #define NUM_FRAMEBUFFERS  2
1.1       root       72: 
                     73: 
1.1.1.11  root       74: /* ST/TT resolution defines */
1.1.1.5   root       75: enum
                     76: {
1.1       root       77:   ST_LOW_RES,
                     78:   ST_MEDIUM_RES,
                     79:   ST_HIGH_RES,
1.1.1.11  root       80:   TT_MEDIUM_RES = 4,
                     81:   TT_HIGH_RES = 6,
                     82:   TT_LOW_RES
1.1       root       83: };
1.1.1.11  root       84: #define ST_MEDIUM_RES_BIT 0x1
                     85: #define ST_RES_MASK 0x3
1.1       root       86: 
                     87: /* Palette mask values for 'HBLPaletteMask[]' */
                     88: #define PALETTEMASK_RESOLUTION  0x00040000
1.1.1.2   root       89: #define PALETTEMASK_PALETTE     0x0000ffff
                     90: #define PALETTEMASK_UPDATERES   0x20000000
                     91: #define PALETTEMASK_UPDATEPAL   0x40000000
1.1       root       92: #define PALETTEMASK_UPDATEFULL  0x80000000
                     93: #define PALETTEMASK_UPDATEMASK  (PALETTEMASK_UPDATEFULL|PALETTEMASK_UPDATEPAL|PALETTEMASK_UPDATERES)
                     94: 
                     95: /* Overscan values */
1.1.1.5   root       96: enum
                     97: {
1.1.1.2   root       98:   OVERSCANMODE_NONE,     /* 0x00 */
                     99:   OVERSCANMODE_TOP,      /* 0x01 */
                    100:   OVERSCANMODE_BOTTOM    /* 0x02 (Top+Bottom) 0x03 */
1.1       root      101: };
                    102: 
1.1.1.12  root      103: extern bool bGrabMouse;
                    104: extern bool bInFullScreen;
1.1.1.11  root      105: extern int nScreenZoomX, nScreenZoomY;
                    106: extern int nBorderPixelsLeft, nBorderPixelsRight;
1.1.1.9   root      107: extern int STScreenStartHorizLine;
                    108: extern int STScreenLeftSkipBytes;
                    109: extern FRAMEBUFFER *pFrameBuffer;
                    110: extern Uint8 *pSTScreen;
1.1.1.3   root      111: extern SDL_Surface *sdlscrn;
1.1.1.9   root      112: extern Uint32 STRGBPalette[16];
                    113: extern Uint32 ST2RGB[4096];
1.1       root      114: 
                    115: extern void Screen_Init(void);
                    116: extern void Screen_UnInit(void);
                    117: extern void Screen_Reset(void);
                    118: extern void Screen_SetFullUpdate(void);
                    119: extern void Screen_EnterFullScreen(void);
                    120: extern void Screen_ReturnFromFullScreen(void);
1.1.1.16! root      121: extern void Screen_ModeChanged(bool bForceChange);
1.1.1.12  root      122: extern bool Screen_Draw(void);
1.1.1.16! root      123: extern bool Screen_SetSDLVideoSize(int width, int height, int bitdepth, bool bForceChange);
1.1.1.3   root      124: 
1.1.1.15  root      125: extern bool bTTSampleHold;      /* TT special video mode */
                    126: 
1.1.1.5   root      127: #endif  /* ifndef HATARI_SCREEN_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.