// File: llgfx_private.h
//
// G A M E.O.N.E - LOW LEVEL LIB V1.0
// Copyright (C) 2001 LEVEL ONE ENTERTAINMENT, 
// Licensed under the terms of LGPL.
//:---------------------------------------------------------------------------
//:Description
//
// INCTYPE bestimmt ob die variablen als Externe reference oder ob sie concret
// angelegt werden sollen
//
//:-----------------------------------------------------------------------------

#if !defined(LLGFX_PRIVATE_INCLUDED)
#define LLGFX_PRIVATE_INCLUDED

//#define LLGFX_ENABLE_DIRTYRECT


#if defined(IMPORT_LLGFX)
#define INCTYPE extern
#else
#define INCTYPE
#endif

#include "llgfx.h"
#include "llgfx_ctexture.h"
#include "llmem.h"
#include "llgfx_blit.h"
#include "llfile.h"
#include "llgfx_sstatic.h"
#include "llgfx_sfont.h"
#include "llqueue_squeue.h"

//:>                     +-------------------------------+
//:>---------------------|    GFX PRIVATE DECLARATION    |----------------------
//:>                     +-------------------------------+
//:Class
INCTYPE int sys_w;				// Desktop Breite
INCTYPE int sys_h;				// Desktop H�he
INCTYPE int sys_bpp;			// Desktop BitTiefe
INCTYPE int sys_fullscreen_bpp;	// fullscreen bpp
INCTYPE int llgfx_displaywidth;		// Breite des aktuellen Bildschirms
INCTYPE int llgfx_displayheight;	// H�he des aktuellen Bildschirms
INCTYPE int llgfx_bitspixel;		// Pixel des aktuellen Bildschirms
INCTYPE int llgfx_pixsize;			// Anzahl bytes pro Pixel
INCTYPE int llgfx_refreshrate;		// Refreschrate des aktuellen Bildschirms
INCTYPE int llgfx_frame_counter;	// z�hlt die anzahl der llgfx_FlipScreen() Aufrufe
INCTYPE int llgfx_displaychanged;	// Erh�ht sich bei jedem Bildschirmmodus Wechsel. z.B. Vollschirm<->Fenster
INCTYPE bool llgfx_clientwindow;	// true wenn von �bergeordneter app aufgerufen
INCTYPE bool llgfx_fullscreen;		 // True bei Vollschirmmodus
INCTYPE s_surface llgfx_sGfxBuffer;	 // Bei jedem lock vom Backbuffer ist diese Struktur g�ltig
INCTYPE queue<s_mode> llgfx_displaymodes;	// Liste der unterst�tzten Displaymodes als Strings


INCTYPE llgfx_sRECT llgfx_WD;	// Clipbereich innerhalb des physischen Schirms (Windowed Display)


//:----------------:[ FLAGS ];-------------------------------------------
INCTYPE bool llgfx_enable_singlebuffer;
INCTYPE bool llgfx_enable_stretchwindow;
INCTYPE float llgfx_window_scale;
INCTYPE TxU32 llgfx_clearcolor;	

//:----------------:[ GFX ARRAY ];----------------------------------------
INCTYPE int num_static_gfx;				//Index der h�hsten Grafiknummer + 1
INCTYPE int cnt_static_gfx;
INCTYPE s_staticgfx * st_static_gfx;	// Static GFX Array
#define STATIC_RESERVED (4)
#define GROW_ARRAY (20)
INCTYPE TxU32 llgfx_palette[256];		// palette f�r 8bit modus

//:-------------------:[ DIRTY RECT]:-------------------------------------
INCTYPE squeue<llgfx_sRECT> llgfx_dirtyrects;// Shadow Liste der Dirtyrects
INCTYPE queue<llgfx_sRECT> llgfx_free_dirtyrects;// Free Liste
#if defined(LLGFX_ENABLE_DIRTYRECT)
INCTYPE bool llgfx_dirtyrect_enabled;
#endif

//:---------------------:[ FONT ]:----------------------------------------
INCTYPE int			llgfx_text_xpos;		// XPos relativ zu llgfx_text_rect
INCTYPE int			llgfx_text_ypos;		// YPos relativ zu llgfx_text_rect
INCTYPE float		llgfx_text_xspacing;	// Abstand x
INCTYPE float		llgfx_text_yspacing;	// Abstand y;
INCTYPE int			llgfx_text_format;		// 0=Links, 1=Rechts, 2= mitte, 3=Block
INCTYPE bool		llgfx_text_wrap;		// true=wrapx, false=clip
INCTYPE s_rect		llgfx_text_rect;		// Ausgabe Rectangle
INCTYPE int			llgfx_tab_pos[8];		// tabpositionen in EM's (Durchschnitss breite)
INCTYPE int			llgfx_tab_chars[8];		// tabF�llzeichen
INCTYPE s_font *	llgfx_cur_font;			// Zeiger auf Fontstruckt
INCTYPE s_font		st_sysfont;				// 10x10 build in Font

//:-------------------:[ Prototypes ]:------------------------------------
INCTYPE void llgfx_ResetVarPool(void);
INCTYPE void llgfx_ResetGfxArray(void);
INCTYPE void llgfx_ReleaseAll(void);
INCTYPE llgfx_id llgfx_CreateGfxIdx(llgfx_id idx,int width,int height);
INCTYPE llgfx_CTexture * llgfx_loadtexture( const char *szFile);
INCTYPE void llgfx_RestoreTexture(llgfx_id idx);



#endif // LLGFX_PRIVATE_INCLUDED