FreeCalypso > hg > fc-magnetite
diff src/cs/drivers/drv_app/r2d/r2d_i.h @ 0:945cf7f506b2
src/cs: chipsetsw import from tcs211-fcmodem
binary blobs and LCD demo files have been excluded,
all line endings are LF only
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Sep 2016 22:50:11 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/drivers/drv_app/r2d/r2d_i.h Sun Sep 25 22:50:11 2016 +0000 @@ -0,0 +1,670 @@ +/*************************************************************************** + + Name R2DI.h + + Function Riviera 2D system : Private API + + Date Modification + ----------------------- + 06/12/2001 Create + ************************************************************************** + History + +****************************************************************************/ + + +#ifndef __R2DI_H_ +#define __R2DI_H_ + +#include "r2d/r2d.h" +#include "rvf/rvf_api.h" + + +/*************************************** + + CONSTANTS + +***************************************/ + + +#if (R2D_ASM == R2D_ON) +////////////////////////////////////////// +// +// R2D ASM API +// + +enum{ + R2D_LCDLCD=1, + R2D_COLORCOLOR=2, + R2D_COLORLCD=3, + R2D_LCDCOLOR=4 +}; + +#endif + + +/*************************************** + + TYPES + +***************************************/ + +//////////////////////////////////////// +// +// Misc +// + +typedef UINT32 R2D_BOOLEAN; // To avoid veneer bug a bool on 16 bits is introduced + +//////////////////////////////////////// +// +// Arc region +// + +// Region delimited by vectors whose scalar +// product with (sa,sb) and (ea,eb) is (+,+) +// of (-,+) or (+,-) +typedef struct R2D_ARC_REGION +{ + INT32 sa,sb,ea,eb; + INT16 one_sector; + BOOLEAN is_null; +} T_R2D_ARC_REGION; + +//////////////////////////////////////// +// +// Textures +// +typedef struct R2D_FREE_TEXTURE +{ + INT16 refcount; + INT16 size; // Exponent of a power of 2 + T_R2D_ARGB_COLOR *pattern; +} T_R2D_FREE_TEXTURE; + +typedef struct R2D_ANCHORED_TEXTURE +{ + INT16 refcount; + INT16 size; // Exponent of a power of 2 + UINT32 *pattern; +} T_R2D_ANCHORED_TEXTURE; + +/////////////////////////////////////// +// +// FRAMEBUFFER +// + + +typedef struct R2D_FRAMEBUFFER +{ + // Refcounting + INT16 refcount; + // List of memory words containing the pixels + UINT32 *p_memory_words; + // End of frameBuffer used to prevent out of + // framebuffer access + // (It is the last word contained in the framebuffer) + // (but that word is used for loops and is never drawn) + UINT32 *p_frame_buffer_end; + // Kind of framebuffer (LCD or 24 bits) + T_R2D_FRAMEBUFFER_KIND kind; + // Dimensions of frameBuffer + UINT16 width,height; + // Semaphore for concurrent accesses to the framebuffer + T_RVF_MUTEX * mutex; +} T_R2D_FRAMEBUFFER; + +// Font cache framebuffer has other fields required to build +// the glyph from a succession of Unicode codes +typedef struct R2D_FONT_CACHE_FRAMEBUFFER +{ + // Refcounting + INT16 refcount; + // List of memory words containing the pixels + UINT32 *p_memory_words; + // End of frameBuffer used to prevent out of + // framebuffer access + // (It is the last word contained in the framebuffer) + UINT32 *p_frame_buffer_end; + // Kind of framebuffer (LCD or 24 bits) + T_R2D_FRAMEBUFFER_KIND kind; + // Dimensions of frameBuffer + UINT16 width,height; + // Semaphore for concurrent accesses to the framebuffer + T_RVF_MUTEX * mutex; +} T_R2D_FONT_CACHE_FRAMEBUFFER; + + +//////////////////////////////////////// +// +// LCD API +// + +typedef UINT32 (*T_R2D_DRAWING_OP)(UINT32 old,UINT32 value); + + +typedef T_R2D_DRAWING_OP T_R2D_DRAWING_OPERATORS[10]; + +//////////////////////////////////////// +// +// OBJECTS +// + +// Metaclass object describing the classes + + +typedef struct R2D_CLASS_SHAPE T_R2D_CLASS_SHAPE; +typedef struct R2D_SHAPE T_R2D_SHAPE; + +typedef void (*T_R2D_shape_release_funct)(T_R2D_SHAPE *self); +typedef void (*T_R2D_shape_draw_funct)(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +typedef void (*T_R2D_shape_fill_funct)(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +typedef T_R2D_SHAPE_PTR (*T_R2D_shape_clone_funct)(T_RVF_MB_ID bank,T_R2D_SHAPE *self); +typedef void (*T_R2D_shape_translate_funct)(T_R2D_SHAPE *self,INT16 dx,INT16 dy); +typedef BOOLEAN (*T_R2D_shape_point_testing_funct)(T_R2D_SHAPE *self,INT16 x,INT16 y); + + +struct R2D_CLASS_SHAPE +{ + void *parent_class; + T_R2D_shape_release_funct release; + T_R2D_shape_draw_funct draw; + T_R2D_shape_fill_funct fill; + T_R2D_shape_clone_funct clone; + T_R2D_shape_translate_funct translate; + T_R2D_shape_point_testing_funct point_in_shape; +}; + +//////////////////////////////////////// +// +// SHAPES OBJECTS +// + +struct R2D_SHAPE +{ + INT16 refcount; + const T_R2D_CLASS_SHAPE *p_r2d_class; +}; + +typedef struct R2D_RECT +{ + INT16 refcount; + const T_R2D_CLASS_SHAPE *p_r2d_class; + INT16 ul_x,ul_y,br_x,br_y; +} T_R2D_RECTANGLE; + +typedef struct R2D_CIRCLE +{ + INT16 refcount; + const T_R2D_CLASS_SHAPE *p_r2d_class; + INT16 x,y,r; +} T_R2D_CIRCLE; + +typedef T_R2D_RECTANGLE T_R2D_ELLIPSE; + +typedef struct R2D_ROUNDRECT +{ + INT16 refcount; + const T_R2D_CLASS_SHAPE *p_r2d_class; + INT16 ul_x,ul_y,br_x,br_y; + INT16 h,v; +} T_R2D_ROUND_RECTANGLE; + +typedef struct R2D_ARC +{ + INT16 refcount; + const T_R2D_CLASS_SHAPE *p_r2d_class; + INT16 ul_x,ul_y,br_x,br_y; + INT16 start_angle,stop_angle; +} T_R2D_ARC; + +typedef struct R2D_TEXT +{ + INT16 refcount; + const T_R2D_CLASS_SHAPE *p_r2d_class; + INT16 x,y; + T_R2D_UTF16 *p_text; +} T_R2D_TEXT; + + +//////////////////////////////////////// +// +// GRAPHIC CONTEXT +// + +typedef struct R2D_GC +{ + // Refcounting + INT16 refcount; + // The framebuffer + T_R2D_FRAMEBUFFER_PTR p_frame_buffer; + // Clip rectangle (in graphic context coordinates) + T_R2D_SHAPE *p_clipping_shape; + // Clipping shape in scanning coordinates + T_R2D_SHAPE *p_s_clipping_shape; + // Foreground pixel value + // (on 24 bits per pixel. Conversion done on the fly + // according to the kind of framebuffer) + T_R2D_ARGB_COLOR foreground_color; + // Cache for computed pixel value corresponding + // to previous color. Used for LCD with dithering off + // to speed drawing + UINT32 foreground_pixel_value; + // Cache for foreground dithering used when dithering ON + UINT32 *p_foreground_dithered_cache; + // Background pixel value + // (on 24 bits per pixel. Conversion done on the fly + // according to the kind of framebuffer) + T_R2D_ARGB_COLOR background_color; + // Cache for computed pixel value corresponding + // to previous color. Used for LCD with dithering off + // to speed drawing + UINT32 background_pixel_value; + // Cache for dithering used when dithering ON + UINT32 *p_background_dithered_cache; + // Background texture + T_R2D_ANCHORED_TEXTURE *background_texture; + // Pen position + INT16 pen_x,pen_y; + // pen_size in pixels + INT16 pen_size; + // Drawing mode + INT16 drawing_mode; + // Drawing operator for above drawing mode + T_R2D_DRAWING_OP drawing_op; + // Context origin (H coordinates of upper-left corner of screen) + INT16 org_x,org_y; + // Context origin (S coordinates for texture of the point corresponding + // to (0,0) H coordinates) + INT16 s_org_x,s_org_y; + // Dash state + BOOLEAN dash; + // Text face + T_R2D_TEXT_FACE text_face; + // Text style + // (List of types requested by the user) + T_R2D_TEXT_STYLE text_style; + // Internal text style + // (list of style effect which must be computed since + // there are not embedded into the fonts) + T_R2D_TEXT_STYLE internal_text_style; + // Text size + T_R2D_TEXT_SIZE text_size; + // Font framebuffer + T_R2D_FRAMEBUFFER *font_frame_buffer; + // Font metrics pointer + INT32 *font_metrics; + // Font transcoding table + INT32 *font_table; + // Script mode (left to right by defaulr) + T_R2D_SCRIPT_MODE script_mode; +} T_R2D_GC; + +//////////////////////////////////////// +// +// FONT CONFIG +// + +typedef INT32 *T_R2D_FONT_METRICS; +typedef INT32 *T_R2D_FONT_TABLE; + +typedef struct R2D_FONT_DESCRIPTION +{ + T_R2D_FONT_TABLE table; + T_R2D_FONT_METRICS metrics; + T_R2D_FRAMEBUFFER_PTR framebuffer; + BOOLEAN compute_bold; +} T_R2D_FONT_DESCRIPTION; + + +/*************************************** + + FUNCTIONS + +***************************************/ + +//////////////////////////////////////// +// +// TOOL +// MACROS +// + +// One should never call following function directly +// because when refcount is reaching 0 an object +// has generally subobject torelease before releasing +// itself + +// Decrement refcount and autodelete if required +#define r2d_release(p) { \ + if (p) \ + { \ + if ((((T_R2D_REFCOUNT*)(p))->refcount)>0) { \ + ((T_R2D_REFCOUNT*)(p))->refcount--; \ + if ((((T_R2D_REFCOUNT*)(p))->refcount==0)) \ + R2D_FREE(p); \ + } \ + } \ + } + + +// Return refcount of an object +#define R2D_REFCOUNT(p) (((T_R2D_REFCOUNT*)(p))->refcount) + +// Compute dithered value +// lightness is either the gray intensity (for monochrome) +// or the component intensity. +// It is coded on at most 8 bits +#if (R2D_DITHERING == R2D_ON) + + #define r2d_dithering_group_and_lightness() \ + lightness = lightness >> (8 - R2D_DITHERING_DIMENSION - R2D_PIXEL_DEPTH); \ + dithering_group=lightness >> R2D_DITHERING_DIMENSION; \ + \ + lightness=lightness & R2D_DITHERED_MASK; + + #define r2d_dithered_value(x,y) \ + \ + dvalue=dithering_group; \ + if (lightness>=r2d_get_dithering_matrix_entry(r2d_g_dithering_matrix,x,y)) \ + dvalue+=1; \ +\ + if (dvalue) \ + dvalue--; +#else + #define r2d_dithering_group_and_lightness() + #define r2d_dithered_value(x,y) +#endif + +extern INT32 r2d_ptree_find(INT32 *tree,INT32 unicode); + +void r2d_arc_region_x_reflect(T_R2D_ARC_REGION *rgn); +void r2d_arc_region_y_reflect(T_R2D_ARC_REGION *rgn); +void r2d_arc_region_diagonal_reflect(T_R2D_ARC_REGION *rgn); +BOOLEAN r2d_check_is_in_arc_region(INT16 x,INT16 y,T_R2D_ARC_REGION *rgn); +INT32 r2d_get_point_side(INT16 x,INT16 y,INT32 sa,INT32 sb); + +//////////////////////////////////////// +// +// LCD +// FUNCTIONS +// + +extern void r2d_convert_foreground_color(T_R2D_GC *gc,UINT32 color); +extern void r2d_convert_background_color(T_R2D_GC *gc,UINT32 color); +extern BOOLEAN r2d_lcd_foreground_pixel(UINT32 lcd_value,T_R2D_GC_PTR src_gc); +extern UINT32 r2d_color_to_lcd(UINT32 pixel_value,INT16 x,INT16 y); +extern UINT32 r2d_lcd_to_color(UINT32 color); + +//////////////////////////////////////// +// +// SHAPE LOW LEVEL +// FUNCTIONS +// + +void r2d_release_rectangle(T_R2D_SHAPE *self); +void r2d_draw_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +void r2d_fill_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +T_R2D_SHAPE_PTR r2d_clone_rectangle_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self); + +void r2d_release_circle(T_R2D_SHAPE *self); +void r2d_draw_circle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +void r2d_fill_circle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +T_R2D_SHAPE_PTR r2d_clone_circle_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self); + +void r2d_release_ellipse(T_R2D_SHAPE *self); +void r2d_draw_ellipse_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +void r2d_fill_ellipse_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); + +void r2d_release_round_rectangle(T_R2D_SHAPE *self); +void r2d_draw_round_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +void r2d_fill_round_rectangle_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +T_R2D_SHAPE_PTR r2d_clone_round_rectangle_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self); + +void r2d_release_arc(T_R2D_SHAPE *self); +void r2d_draw_arc_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +void r2d_fill_arc_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +T_R2D_SHAPE_PTR r2d_clone_arc_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self); + +void r2d_release_text(T_R2D_SHAPE *self); +void r2d_draw_text_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +void r2d_fill_text_shape(T_R2D_SHAPE *self,T_R2D_GC_PTR gc); +T_R2D_SHAPE_PTR r2d_clone_text_shape(T_RVF_MB_ID bank,T_R2D_SHAPE *self); + +void r2d_translate_rectangle_shape(T_R2D_SHAPE *self,INT16 dx,INT16 dy); +void r2d_translate_point_shape(T_R2D_SHAPE *self,INT16 dx,INT16 dy); + +BOOLEAN r2d_point_in_rectangle_shape(T_R2D_SHAPE *self,INT16 x,INT16 y); +BOOLEAN r2d_point_in_circle_shape(T_R2D_SHAPE *self,INT16 x,INT16 y); +BOOLEAN r2d_point_in_ellipse_shape(T_R2D_SHAPE *self,INT16 x,INT16 y); +BOOLEAN r2d_point_in_round_rectangle_shape(T_R2D_SHAPE *self,INT16 x,INT16 y); +BOOLEAN r2d_point_in_not_supported_shape(T_R2D_SHAPE *self,INT16 x,INT16 y); + +//////////////////////////////////////// +// +// FRAMEBUFFER ACCESS +// FUNCTIONS +// + + + +// Write a pixel at position x,y with graphic context gc +// pixel_value must be compatible with the framebuffer owned +// by the graphic context. No color conversion is done +// here +extern void r2d_write_lcd_pixel(T_R2D_GC *gc,INT16 x,INT16 y,UINT32 pixel_value); +extern void r2d_write_lcd_line(T_R2D_GC* gc,INT16 x,INT16 y,INT16 nb,R2D_BOOLEAN +background); +extern void r2d_arc_write_lcd_line(T_R2D_GC* gc,INT16 x,INT16 y,INT16 org_x,INT16 org_y,INT16 nb, + T_R2D_ARC_REGION *rgn,R2D_BOOLEAN +background); + + +extern T_R2D_DRAWING_OP r2d_get_drawing_op(T_R2D_GC *gc,T_R2D_DRAWING_MODE mode); +#if (R2D_ASM == R2D_ON) +extern UINT32 * r2d_get_asm_drawing_op(T_R2D_GC *gc,T_R2D_DRAWING_MODE mode); + +#endif + +//////////////////////////////////////// +// +// COLOR +// FUNCTIONS +// + +// color conversion : on the fly dithering and color scaling +// with final conversion to the format used by the LCD if needed +// The dithered matrix or the pixel_value are cached into the gc +// structure +extern void r2d_convert_foreground_color(T_R2D_GC *gc,UINT32 color); +extern void r2d_convert_background_color(T_R2D_GC *gc,UINT32 color); + +// Get value at dithering matrix position +#define r2d_get_dithering_matrix_entry(matrix,x,y) \ + *(matrix+(x&1)+(y&1)*2) + +// Set element (x,y) of dithering or dithered matrix +extern void r2d_set_dithering_matrix_entry(UINT32 *matrix,UINT32 elem,INT16 x,INT16 y); + +extern void r2d_convert_foreground_color_color(T_R2D_GC *gc,UINT32 color); +extern void r2d_convert_background_color_color(T_R2D_GC *gc,UINT32 color); + +extern UINT16 r2d_max_color(UINT16 red,UINT16 green, UINT16 blue); +// Get min component +extern UINT16 r2d_min_color(UINT16 red,UINT16 green, UINT16 blue); + +extern UINT32 r2d_get_color_pixel_value(T_R2D_GC *gc,INT16 x,INT16 y); + +//////////////////////////////////////// +// +// TEXT +// FUNCTIONS +// + +#define r2d_get_char_x(p) (((INT32*)p)[0]) + +//////////////////////////////////////// +// +// COPY +// FUNCTIONS +// + +#if (R2D_ASM == R2D_OFF) + +void r2d_blit_lcd_to_lcd(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc, + T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle, + R2D_BOOLEAN use_foreground_color); + +void r2d_blit_color_to_color(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc, + T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle, + R2D_BOOLEAN use_foreground_color); + +void r2d_blit_lcd_to_color(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc, + T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle, + R2D_BOOLEAN use_foreground_color); + +void r2d_blit_color_to_lcd(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc, + T_R2D_SHAPE_PTR src_rectangle, T_R2D_SHAPE_PTR dst_rectangle, + R2D_BOOLEAN use_foreground_color); +#else + +void r2d_blit_asm(T_R2D_GC_PTR src_gc,T_R2D_GC_PTR dst_gc, + T_R2D_SHAPE_PTR src_rectangle, + T_R2D_SHAPE_PTR dst_rectangle, + R2D_BOOLEAN use_foreground_color,INT32 srcdst); +#endif + + +/*************************** + + DEFINES + +***************************/ + +/* FOR SEARCH INSIDE PATRICIA TREE */ +#define R2D_PTREE_TYPE 3 +#define R2D_PTREE_BRANCHING 0 +#define R2D_PTREE_PREFIX 1 +#define R2D_PTREE_UNICODE_BLOCK 0 +#define R2D_PTREE_GLYPH_INDEX 1 +#define R2D_PTREE_CONVERSION 2 +#define R2D_PTREE_LEFT 2 +#define R2D_PTREE_RIGHT 3 +#define R2D_PTREE_CONVERSION 2 +#define R2D_PTREE_T_LEAF 0 +#define R2D_PTREE_SHIFT 4 + +/* FOR FONT DESCRIPTION */ + +#define R2D_SMALL_SYSTEM_NORMAL 0 +#define R2D_SMALL_SYSTEM_BOLD 1 +#define R2D_SMALL_SYSTEM_ITALIC 2 +#define R2D_SMALL_SYSTEM_BOLD_ITALIC 3 + +#define R2D_MEDIUM_SYSTEM_NORMAL 4 +#define R2D_MEDIUM_SYSTEM_BOLD 5 +#define R2D_MEDIUM_SYSTEM_ITALIC 6 +#define R2D_MEDIUM_SYSTEM_BOLD_ITALIC 7 + +#define R2D_BIG_SYSTEM_NORMAL 8 +#define R2D_BIG_SYSTEM_BOLD 9 +#define R2D_BIG_SYSTEM_ITALIC 10 +#define R2D_BIG_SYSTEM_BOLD_ITALIC 11 + +#define R2D_SMALL_TYPEWRITER_NORMAL 12 +#define R2D_SMALL_TYPEWRITER_BOLD 13 +#define R2D_SMALL_TYPEWRITER_ITALIC 14 +#define R2D_SMALL_TYPEWRITER_BOLD_ITALIC 15 + +#define R2D_MEDIUM_TYPEWRITER_NORMAL 16 +#define R2D_MEDIUM_TYPEWRITER_BOLD 17 +#define R2D_MEDIUM_TYPEWRITER_ITALIC 18 +#define R2D_MEDIUM_TYPEWRITER_BOLD_ITALIC 19 + +#define R2D_BIG_TYPEWRITER_NORMAL 20 +#define R2D_BIG_TYPEWRITER_BOLD 21 +#define R2D_BIG_TYPEWRITER_ITALIC 22 +#define R2D_BIG_TYPEWRITER_BOLD_ITALIC 23 + +#define R2D_SMALL_PROPORTIONAL_NORMAL 24 +#define R2D_SMALL_PROPORTIONAL_BOLD 25 +#define R2D_SMALL_PROPORTIONAL_ITALIC 26 +#define R2D_SMALL_PROPORTIONAL_BOLD_ITALIC 27 + +#define R2D_MEDIUM_PROPORTIONAL_NORMAL 28 +#define R2D_MEDIUM_PROPORTIONAL_BOLD 29 +#define R2D_MEDIUM_PROPORTIONAL_ITALIC 30 +#define R2D_MEDIUM_PROPORTIONAL_BOLD_ITALIC 31 + +#define R2D_BIG_PROPORTIONAL_NORMAL 32 +#define R2D_BIG_PROPORTIONAL_BOLD 33 +#define R2D_BIG_PROPORTIONAL_ITALIC 34 +#define R2D_BIG_PROPORTIONAL_BOLD_ITALIC 35 + + +/*************************** + + GLOBALS + +****************************/ + +// and for reentrancy they should be read only if possible +// or protected by a semaphore otherwise + +#if (R2D_ASM == R2D_ON) +extern T_RVF_MUTEX * r2d_g_blit_mutex; +extern T_R2D_DRAWING_MODE r2d_g_old_mode; +extern R2D_BOOLEAN r2d_g_old_use_foreground; +extern INT32 r2d_g_old_srcdst; +#endif + +// Global mutex for access to global variables +extern T_RVF_MUTEX * r2d_g_global_mutex; + + +// Drawing operators (C version) +extern const T_R2D_DRAWING_OPERATORS r2d_g_lcd_operators,r2d_g_color_operators; + +extern UINT32 *r2d_g_asm_lcd_operators[],*r2d_g_asm_color_operators[]; + +// LCD framebuffer +extern T_R2D_FRAMEBUFFER* r2d_g_framebuffer; + +// For fonts + +extern T_R2D_FONT_DESCRIPTION *r2d_g_font_configuration; + +// (default pointers for initialization of graphical context) +extern T_R2D_FRAMEBUFFER *r2d_g_default_font_framebuffer; +extern INT32 *r2d_g_default_font_metrics; +extern INT32 *r2d_g_default_font_table; + + +// Dithering matrix +extern UINT32 *r2d_g_dithering_matrix; + +// Class globals +extern const T_R2D_CLASS_SHAPE r2d_class_rectangle; +extern const T_R2D_CLASS_SHAPE r2d_class_circle; +extern const T_R2D_CLASS_SHAPE r2d_class_ellipse; +extern const T_R2D_CLASS_SHAPE r2d_class_round_rectangle; +extern const T_R2D_CLASS_SHAPE r2d_class_arc; +extern const T_R2D_CLASS_SHAPE r2d_class_text; + +// Memory bank id +extern T_RVF_MB_ID r2d_mb_id; + +// Global LCD graphical context +extern T_R2D_GC_PTR r2d_g_lcd_gc; + +// Global flag to check if event required +extern BOOLEAN r2d_g_event_was_sent; + +// Global flag to disable refresh +extern INT16 r2d_g_refresh_disabled; + +/* global addr id */ +extern T_RVF_ADDR_ID r2d_addr_id; + + +#endif +