#help_index "Graphics"

public class CGrGlobals
{
        I64                     *to_8_bits, *to_8_colors;
        CDC             *screen_image,  //Read only.
                                *dc,                    //Persistent
                                *dc1,
                                *dc2,                   //Updated every refresh
                                *dc_cache,
                                *zoomed_dc;
        U32                     *text_base;     //See TextBase Layer. (Similar to 0xB8000 but 32 bits)
        U16                     *win_z_buf;

        #define SPHT_ELEM_CODE          1
        CHashTable      *sprite_hash;

        U16                     *win_uncovered_bitmap;
        I64                      highest_uncovered;
        I64                      pan_text_x, pan_text_y;        //[-7,7]
        U0                 (*fp_final_screen_update)(CDC *dc);//Mouse cursor is handled here.
        U0                 (*fp_wall_paper)(CTask *task);
        U0                 (*fp_draw_mouse)(CDC *dc, I64 x, I64 y);
        U0                 (*fp_draw_grab_mouse)(CDC *dc, I64 x, I64 y, Bool closed);
        U8                      *empty_sprite; //Gets assigned gr.empty_sprite

        #define GR_PEN_BRUSHES_NUM      64
        CDC             *pen_brushes                    [GR_PEN_BRUSHES_NUM],
                                *collision_pen_brushes  [GR_PEN_BRUSHES_NUM],
                                *even_pen_brushes               [GR_PEN_BRUSHES_NUM],
                                *odd_pen_brushes                [GR_PEN_BRUSHES_NUM];
        I8                       circle_lo[GR_PEN_BRUSHES_NUM][GR_PEN_BRUSHES_NUM],
                                 circle_hi[GR_PEN_BRUSHES_NUM][GR_PEN_BRUSHES_NUM];

        #define GR_SCREEN_ZOOM_MAX      8
        U8                      *screen_zoom_tables[GR_SCREEN_ZOOM_MAX + 1], *screen_cache;
        I64                      screen_zoom, sx, sy;

        //When zoomed, this keeps the mouse centered.
        Bool             continuous_scroll,
                                 hide_row, hide_col;
} gr;

public CBGR24 gr_palette[COLORS_NUM];

//See RLf_VESA
//See SysGrInit()
//Allows consts to be used instead of vars.
HashPublic("GR_WIDTH", HTT_DEFINE_STR);;
DefinePrint("GR_WIDTH", "%d", sys_vbe_mode.width);
HashPublic("GR_HEIGHT", HTT_DEFINE_STR);;
DefinePrint("GR_HEIGHT", "%d", sys_vbe_mode.height);

#help_index "Char;TextBase Layer/Char"
DefinePrint("TEXT_ROWS", "%d", text.rows);;
HashPublic("TEXT_ROWS", HTT_DEFINE_STR);;
DefinePrint("TEXT_COLS", "%d", text.cols);;
HashPublic("TEXT_COLS", HTT_DEFINE_STR);;