/**************************************************************************************
 
                File            : DRAW.H
                Basic drawing routines
 
***************************************************************************************/
 
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You must do : 
#define TDE_GLOBALS 
in one (and only one) .c file of your Module.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
 
/* To avoid unnecessary includes :  */
#ifndef  __TDE_DRAW_H
#define __TDE_DRAW_H
 
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
 
 
/* For DLLs who are using this module : */ 
#undef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
 #define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
 #define CPA_EXPORT __declspec(dllexport)
#else
 #define CPA_EXPORT
#endif
 
 
/* For Global declaration in C files : */
#ifndef TDE_GLOBALS
 #define __TDE_EXTERN extern
#else /* !TDE_GLOBALS */
 #define __TDE_EXTERN
#endif /* !TDE_GLOBALS */
 
/*
-----------------------------------------------------------------------------
INCLUDES FILES :
Include here any other header files of your module you need !
Ex : 
#include "toto.h"
Note : Do Not include header files from other Modules (do this in C files 
only)
-----------------------------------------------------------------------------
*/
 
/*
-----------------------------------------------------------------------------
CONSTANT DECLARATION:
Ex :
#define TDE_C_LMAX 100
-----------------------------------------------------------------------------
*/
 
/*
-----------------------------------------------------------------------------
TYPES DEFINITION : 
Declare here any type you need, and constant you need to do this :
Ex :              typedef struct TDE_tdstToto_
{
        long aLMAX_lBuffer[TDE_C_LMAX];
    ...
} TDE_tdst_Toto ;
-----------------------------------------------------------------------------
*/
 
/*
-----------------------------------------------------------------------------
GLOBAL VARIABLE DECLARATION :
Ex : 
__TDE_EXTERN <type> <variable name>
 #ifdef TDE_GLOBALS
 = <initial values>
 #endif
 ;
-----------------------------------------------------------------------------
*/
 
/*
-----------------------------------------------------------------------------
FUNCTIONS DECLARATION:
-----------------------------------------------------------------------------
*/
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vFastDrawMemorySpriteAbsolute
 VERSION : 2.0 / Valérie
           1.0 / Franck
 
 AIM : Display a sprite stored in memory
 ! ATTENTION ! : The sprite has to be defined with absolute coordinates
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
extern void TDE_vFastDrawMemorySpriteAbsolute  (GLD_tdpstViewportAttributes p_stViewAttrib,
                                                TDE_tdsSuperObject *p_stSuperObject,
                                                TDE_tdsRect *p_stScreenRect);
 
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vFastDrawMemorySpriteAbsoluteInvert
 VERSION : 2.0 / Valérie
           1.0 / Franck
 
 AIM : Display a sprite stored in memory
 ! ATTENTION ! : The sprite has to be defined with absolute coordinates
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
extern void TDE_vFastDrawMemorySpriteAbsoluteInvert (GLD_tdpstViewportAttributes p_stViewAttrib,
                                                     TDE_tdsSuperObject *p_stSuperObject,
                                                     TDE_tdsRect *p_stScreenRect);
 
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vDrawSuperObject16
 VERSION : 2.0 / Valérie
           1.0 / Franck
 
 AIM : Display a super object (for sprites)
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
 
extern void TDE_vDrawSuperObject16(GLD_tdpstViewportAttributes p_stViewAttrib, TDE_tdsSuperObject *p_stSuperObjet);
 
 
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vDrawSuperObjectFast16
 VERSION : 2.0 / Valérie
           1.0 / Franck
 
 AIM : Display a super object (for sprites) without stretch
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
 
extern void TDE_vDrawSuperObjectFast16(GLD_tdpstViewportAttributes p_stViewAttrib, TDE_tdsSuperObject *p_stSuperObjet);
extern void TDE_vDrawMemSprite_Abs_16(GLD_tdpstViewportAttributes p_stViewAttrib, TDE_tdsSuperObject *p_stSuperObjet);
 
 
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vDrawSuperObjectRotated16
 VERSION : 2.0 / Valérie
                   1.0 / Franck
 
 AIM : Display a super object with rotation (for sprites)
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
 
extern void TDE_vDrawSuperObjectRotated16(GLD_tdpstViewportAttributes p_stViewAttrib, TDE_tdsSuperObject *p_stSuperObjet);
 
 
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vDrawSuperObjectClipped16
 VERSION : 2.0 / Valérie
           1.0 / Franck
 
 AIM : Display a super object with clipping (for sprites)
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
 
extern void TDE_vDrawSuperObjectClipped16(GLD_tdpstViewportAttributes p_stViewAttrib, TDE_tdsSuperObject *p_stSuperObjet);
 
 
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vSendObjectsToViewPort
 VERSION : 2.0 / Valérie
           1.0 / Franck
 
 AIM : Create Z list with a camera attached to a Viewport
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
extern void TDE_vSendObjectsToViewPort(GLD_tdpstViewportAttributes p_stViewAttrib, TDE_tdsSuperObject *p_stSuperObject , TDE_p_stSuperObject *ZList);
 
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
 NAME : TDE_vSendListToViewPort
 VERSION : 2.0 / Valérie
           1.0 / Franck
 
 AIM : Send Z liste to a viewport
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
extern void TDE_vSendListToViewPort(GLD_tdpstViewportAttributes p_stViewAttrib, TDE_p_stSuperObject *ZList, TDE_tdsRect *stClipScreenRect, BOOL bViewPortLocked);
 
 
#ifdef __cplusplus
};
#endif /* __cplusplus */
 
 
#endif /* __TDE_DRAW_H  */
 
 
 
 
 
