reman3/Rayman_X/cpa/tempgrp/GliGlou/MultiDRV/Src/DLLInter.c

558 lines
27 KiB
C

/*
=======================================================================================
Name : DLLInter.c
Author : vincent lhullier Date :14/09/98
Description : initialize Specific driver DLL
=======================================================================================
*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "windows.h"
#include "GLI_util.h"
#include "DLLInter.h"
#include "DLLCaps.h"
#include "vertex.h"
#include "PvObj_st.h"
#include "Camera.h"
#include "GliBench.h"
#include "TexBench.h"
#include "GLD.h"
#include "PRF.h"
#include "Init_Gli.h"
#include "DispMode.h"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
=======================================================================================
Structure
=======================================================================================
*/
GLI_tdst_DllInfos GLI_gst_DllInfo;
/*
=======================================================================================
Constants
=======================================================================================
*/
#ifdef _DEBUG
#define C_szVersionSuffix "vd"
#elif RETAIL
#define C_szVersionSuffix "vf"
#elif NDEBUG
#define C_szVersionSuffix "vr"
#else
#error "Bad version"
#endif
/*
=======================================================================================
External
=======================================================================================
*/
extern GLI_tdstInternalGlobalValuesFor3dEngine *GLI_BIG_GLOBALS;
extern long gs_aDEFTableOfTextureMemoryChannels[];
extern GLI_tdstTexture *gs_aDEFTableOfTextureAlreadyRead [];
extern void *GLI_gs_p_ConvertBufferMipMapping;
extern long GLD_RenderingCounter;
extern void GLI_vSetGlobalAlpha(float );
extern void GLI_xSerialProjection ( GLI_tdstCamera *,long ,GLI_tdstAligned3DVector *,GLI_tdstAligned2DVector *);
extern long GLI_xIsGliInit(void);
extern void * GLI_fn_p_vTmpMalloc( unsigned long );
extern void GLI_fn_vTmpFree( void *);
extern long GLI_lComputeTexturesSize();
extern void GLI_vCompressTex565 ( GLI_tdstTexture *, void *);
extern void GLI_vCompressTex4444( GLI_tdstTexture *, void *);
extern void GLI_vCompressTex1555( GLI_tdstTexture *, void *);
extern void GLI_xLoadTextureInTexelField(GLI_tdstTexture *, long *, BOOL);
extern void GLI_vReloadTextures(void);
extern void GLI_vDivideBitmapSurfaceBy2NonZero (unsigned long *,unsigned long *,long , long );
extern void GLI_vDivideBitmapSurfaceBy2Palette (unsigned long *,unsigned long *,long , long );
extern void GLI_vDivideBitmapSurfaceBy2 (unsigned long *,unsigned long *,long , long );
extern unsigned long GLI_vVerifyTextureIsRealyAlpha ( GLI_tdstTexture *);
extern long GLI_fn_lAddDisplayMode( long , long , long , long );
extern void GLD_fn_vBlitStretched16b ( long , long , unsigned short *, long , long , long , unsigned short *);
extern long GLD_fn_lAddDefinedPixelFormat( GLD_tdstPixelFormat * );
extern GLD_tdstPixelFormat *GLD_fn_p_stGetDefinedPixelFormat( long );
extern long GLD_fn_lComputeWaitFrameForSmoothSynchro();
extern void Erm_fn_v_PrintErrMsg(char *, char *);
extern void GAM_fn_vReadStringInUbiIniFile( char *, char *, long , char *);
extern void GAM_fn_vWriteStringInUbiIniFile( char *, char *, char *);
extern void * fn_hGetDrawSemaphore( void );
extern void GLI_vUsePreCalculatedMipMaps ( GLI_tdstTexture *, void **, unsigned char *);
#if !defined(RETAIL)
extern void MMG_fn_vAddMemoryInfo (long , long , void *);
#endif
#if !defined(RETAIL) && !defined(PRESS_DEMO)
extern void GAM_fn_vShowRasters(void);
extern long PRF_fn_lGetIndependantVariable(unsigned long );
extern void PRF_fn_vSetIndependantVariable(unsigned long , long );
extern long PRF_fn_lIncIndependantVariable(unsigned long , long );
extern void GLI_fn_vPRFIncreaseVariable (unsigned long , void *, unsigned long );
extern void GLI_fn_vPRFStartChrono (unsigned long , void *);
extern void GLI_fn_vPRFStopChrono (unsigned long , void *);
#endif
extern HINSTANCE fn_hGetApplicationInstance(void);
extern u_long fn_ulTimerTickPerSecond(short wTimerType);
extern void fn_vTimerGetCounter(short wTimerType, stTimerCount* p_stValue);
/*
=======================================================================================
Globals
=======================================================================================
*/
/* General */
long (*GLI_DRV_lSendDataToDll)(char *, void *);
/* DOMATxxx.C */
void (* GLI_DRV_vDoOpaqueTextureSelection)( GLI_tdstInternalGlobalValuesFor3dEngine * );
void (* GLI_DRV_vWrite16bBitmapToBackBuffer) ( void *,long ,long ,long ,long, long, long );
void (* GLI_DRV_vAddBlackPolygon)( long , long , long , long );
void (* GLI_DRV_vNoBlackPolygon)( void );
void (* GLI_DRV_vComputeFogEffect)(GLI_tdstInternalGlobalValuesFor3dEngine *);
BOOL (* GLI_DRV_bBeginScene)(void);
BOOL (* GLI_DRV_bEndScene)(void);
/* ACCES_XXXX.C */
void (* GLI_DRV_vSendSpriteToClip)(GLI_tdstAligned2DVector *,MTH_tdxReal ,GLI_tdstInternalGlobalValuesFor3dEngine *);
void (* GLI_DRV_vSendSpriteToClipWithUV)( GLI_tdstAligned2DVector *, MTH_tdxReal *, MTH_tdxReal , GLI_tdstInternalGlobalValuesFor3dEngine *);
/* ACCES_ALL.C */
void (* GLI_DRV_vSendSingleLineToClip)( GLD_tdstViewportAttributes *, GLI_tdstAligned3DVector *, GLI_tdstAligned2DVector *, GLI_tdstAligned3DVector *, GLI_tdstAligned2DVector *, GLI_tdstInternalGlobalValuesFor3dEngine *, long , GEO_tdstColor *);
/* HDWTex_xxx.C */
void (* GLI_DRV_vDownLoadTextures)(long, long, BOOL);
void (* GLI_DRV_vUnLoadTextures)(void);
long (* GLI_DRV_lGetTextureSize)( GLI_tdstTexture *);
/* init_XXX.c */
void (* GLI_DRV_vFlipDevice)(long );
void (* GLI_DRV_vFlipDeviceWithSyncro)(void);
void (* GLI_DRV_vClearDevice)(BOOL, BOOL , unsigned long );
void (* GLI_DRV_xInitDriver) (HWND, BOOL, long, long, long );
void (* GLI_DRV_vCloseDriver) (void);
void (* GLI_DRV_vClearZBufferRegion)(long ,long ,long ,long );
//long (* GLI_DRV_fn_lEnumerateDisplayMode)(void);
long (* GLI_DRV_fnl_EnumModes)(char *, char *);
HRESULT (* GLI_DRV_hChangeMode)( BOOL, long, long, long );
BOOL (* GLI_DRV_bLockDevice)( void **, long *);
BOOL (* GLI_DRV_bUnlockDevice)( void );
BOOL (* GLI_DRV_bPrepareForGliWindowed)(HWND);
void (* GLI_DRV_vPrepareForGliFullScreen)(HWND);
void (* GLI_DRV_vActivateGli)(HWND, BOOL);
void (* GLI_DRV_vReadaptDisplay)(void);
BOOL (* GLI_DRV_bWindowedModeIsOptimized)( void );
void (* GLI_DRV_vOptimizedWindowedMode)( void );
void (* GLI_DRV_vNonOptimizedWindowedMode)( void );
void (* GLI_DRV_vSetMainWindowForRender)(HWND);
void (* GLI_DRV_vRecomputeViewportToMaximizeDisplay)(int);
/* ClipTriangles */
void (* GLI_DRV_xClearViewingList)( void );
void (* GLI_DRV_xSendListToViewport)( GLD_tdstViewportAttributes * );
void (* GLI_DRV_vSetZClip)(float ,GLI_tdstInternalGlobalValuesFor3dEngine *);
void (* GLI_DRV_vSetClipWindow)(float ,float ,float ,float ,GLI_tdstInternalGlobalValuesFor3dEngine *);
void (* GLI_DRV_xSendElementTIToClip_TRIANGLES)( GEO_tdstElementIndexedTriangles *, GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT);
void (* GLI_DRV_xSendSingleTriangleToClip_TRIANGLES)( GLI_tdstAligned2DVector *a3_st2DVertex, ACP_tdst2DUVValues *a3_stUV, GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT);
/* misc request (see request type n dllcaps.h file) */
long (* GLI_DRV_lRequest)( long, long, long );
#ifndef RETAIL
void (*GLI_DRV_vGetStats)(unsigned long *, unsigned long *);
#endif
void (*GLI_DRV_vWaitRetrace)(void);
/*
=======================================================================================
Public function
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : Load Driver DLL
----------------------------------------------------------------------------------------
*/
long GLI_fnl_InitDll( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
long (*SendFunctionToDll)(char *, FARPROC );
long (*pfnGetDllInfo)(char *, void *);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
GLI_gst_DllInfo.h_Module = LoadLibrary( GLI_gst_DllInfo.sz_FileName );
if (GLI_gst_DllInfo.h_Module == NULL)
return 0;
/*
* Get Info
*/
pfnGetDllInfo = (long (__cdecl *)(char *, void *) ) GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_lGetDllInfo" );
if (pfnGetDllInfo == NULL)
return 0;
pfnGetDllInfo( "Name", (void *) GLI_gst_DllInfo.sz_Desc );
if (strcmp( GLI_gst_DllInfo.sz_Desc, GLI_gst_DllInfo.sz_Name ) != 0)
return 0;
pfnGetDllInfo( "Description",(void *) GLI_gst_DllInfo.sz_Desc );
pfnGetDllInfo( "Version", (void *) GLI_gst_DllInfo.sz_Version );
pfnGetDllInfo( "Code", (void *) &GLI_gst_DllInfo.ul_Code );
/*
* Send data pointer to DLL (all data cannot be send now, some initialized later are send later)
*/
GLI_DRV_lSendDataToDll = (long (__cdecl *)(char *, void *) ) GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_lSetCommonData" );
GLI_DRV_lSendDataToDll("GliDllInfo", &GLI_gst_DllInfo);//chbani
GLI_DRV_lSendDataToDll("GliBigGlobals", GLI_BIG_GLOBALS);
GLI_DRV_lSendDataToDll("TextureMemoryChannels", gs_aDEFTableOfTextureMemoryChannels);
GLI_DRV_lSendDataToDll("TextureAlreadyRead", gs_aDEFTableOfTextureAlreadyRead );
GLI_DRV_lSendDataToDll("ConvertBufferMipMapping", GLI_gs_p_ConvertBufferMipMapping);
GLI_DRV_lSendDataToDll("RenderingCounterPointer", &GLD_RenderingCounter );
GLI_DRV_lSendDataToDll("DrawSem", fn_hGetDrawSemaphore() );
GLI_DRV_lSendDataToDll("GliCaps", &GLI_g_stCaps );
#ifdef GLI_BENCH
GLI_DRV_lSendDataToDll("GliBench", &GLI_g_stBench );
#endif
/*
* send function pointer to DLL (all needed are sended here)
*/
SendFunctionToDll = (long (__cdecl *)(char *, FARPROC) ) GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_lSetCommonFct" );
SendFunctionToDll("SetGlobalAlpha", (FARPROC) GLI_vSetGlobalAlpha);
SendFunctionToDll("SerialProjection", (FARPROC) GLI_xSerialProjection);
SendFunctionToDll("IsGliInit", (FARPROC) GLI_xIsGliInit);
SendFunctionToDll("TmpMalloc", (FARPROC) GLI_fn_p_vTmpMalloc);
SendFunctionToDll("TmpFree", (FARPROC) GLI_fn_vTmpFree);
SendFunctionToDll("ErmPrintMessage", (FARPROC) Erm_fn_v_PrintErrMsg );
SendFunctionToDll("ComputeTextureSize", (FARPROC) GLI_lComputeTexturesSize);
SendFunctionToDll("CompressTex565", (FARPROC) GLI_vCompressTex565);
SendFunctionToDll("CompressTex4444", (FARPROC) GLI_vCompressTex4444);
SendFunctionToDll("CompressTex1555", (FARPROC) GLI_vCompressTex1555);
SendFunctionToDll("DivideBitmapSurfaceBy2", (FARPROC) GLI_vDivideBitmapSurfaceBy2);
SendFunctionToDll("DivideBitmapSurfaceBy2NonZero", (FARPROC) GLI_vDivideBitmapSurfaceBy2NonZero);
SendFunctionToDll("DivideBitmapSurfaceBy2Palette", (FARPROC) GLI_vDivideBitmapSurfaceBy2Palette);
SendFunctionToDll("VerifyTextureIsReallyAlpha", (FARPROC) GLI_vVerifyTextureIsRealyAlpha );
SendFunctionToDll("LoadTextureInTexelField", (FARPROC) GLI_xLoadTextureInTexelField);
SendFunctionToDll("ReloadTextures", (FARPROC) GLI_vReloadTextures);
SendFunctionToDll("AddDisplayMode", (FARPROC) GLI_fn_lAddDisplayMode );
SendFunctionToDll("BlitStretched16b", (FARPROC) GLD_fn_vBlitStretched16b );
SendFunctionToDll("GetDefinedPixelFormat", (FARPROC) GLD_fn_p_stGetDefinedPixelFormat );
SendFunctionToDll("AddDefinedPixelFormat", (FARPROC) GLD_fn_lAddDefinedPixelFormat );
SendFunctionToDll("ComputeWaitFrameForSmoothSynchro",(FARPROC) GLD_fn_lComputeWaitFrameForSmoothSynchro );
SendFunctionToDll("ReadIniString", (FARPROC) GAM_fn_vReadStringInUbiIniFile );
SendFunctionToDll("WriteIniString", (FARPROC) GAM_fn_vWriteStringInUbiIniFile );
#if !defined(RETAIL)
SendFunctionToDll("AddMemoryInfo", (FARPROC) MMG_fn_vAddMemoryInfo );
#endif
#if !defined(RETAIL) && !defined(PRESS_DEMO)
SendFunctionToDll("ShowRasters", (FARPROC) GAM_fn_vShowRasters);
SendFunctionToDll("IncIndependantVariable", (FARPROC) PRF_fn_lIncIndependantVariable);
SendFunctionToDll("SetIndependantVariable", (FARPROC) PRF_fn_vSetIndependantVariable);
SendFunctionToDll("GetIndependantVariable", (FARPROC) PRF_fn_lGetIndependantVariable);
SendFunctionToDll("IncreaseVariable", (FARPROC) GLI_fn_vPRFIncreaseVariable );
SendFunctionToDll("ResetVariable", (FARPROC) PRF_fn_vResetVariable );
SendFunctionToDll("StopChrono", (FARPROC) GLI_fn_vPRFStopChrono );
SendFunctionToDll("StartChrono", (FARPROC) GLI_fn_vPRFStartChrono );
#endif
#ifdef BENCH_TEXTURE
SendFunctionToDll("TexBenchSetTextureSize", (FARPROC) TEXBENCH_fn_vSetTextureSize );
#endif
SendFunctionToDll("TimerGetCounter", (FARPROC) fn_vTimerGetCounter );
SendFunctionToDll("TimerTickPerSecond", (FARPROC) fn_ulTimerTickPerSecond );
/* DOMATxxx.C */
GLI_DRV_vDoOpaqueTextureSelection = ( void (__cdecl *) (GLI_tdstInternalGlobalValuesFor3dEngine *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vDoOpaqueTextureSelection" );
GLI_DRV_vWrite16bBitmapToBackBuffer = ( void (__cdecl *) (void *,long ,long ,long ,long, long, long) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vWrite16bBitmapToBackBuffer" );
GLI_DRV_vAddBlackPolygon = ( void (__cdecl *) (long , long , long , long) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vAddBlackPolygon" );
GLI_DRV_vNoBlackPolygon = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vNoBlackPolygon" );
GLI_DRV_vComputeFogEffect = ( void (__cdecl *) (GLI_tdstInternalGlobalValuesFor3dEngine *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vComputeFogEffect" );
GLI_DRV_bBeginScene = ( BOOL (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_bBeginScene" );
GLI_DRV_bEndScene = ( BOOL (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_bEndScene" );
/* ACCES_XXXX.C */
GLI_DRV_vSendSpriteToClip = ( void (__cdecl *) (GLI_tdstAligned2DVector *,MTH_tdxReal ,GLI_tdstInternalGlobalValuesFor3dEngine *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vSendSpriteToClip" );
GLI_DRV_vSendSpriteToClipWithUV = ( void (__cdecl *) (GLI_tdstAligned2DVector *, MTH_tdxReal *, MTH_tdxReal , GLI_tdstInternalGlobalValuesFor3dEngine *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vSendSpriteToClipWithUV" );
/* ACCES_ALL.C */
GLI_DRV_vSendSingleLineToClip = ( void (__cdecl *) (GLD_tdstViewportAttributes *, GLI_tdstAligned3DVector *, GLI_tdstAligned2DVector *, GLI_tdstAligned3DVector *, GLI_tdstAligned2DVector *, GLI_tdstInternalGlobalValuesFor3dEngine *, long , GEO_tdstColor *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vSendSingleLineToClip" );
/* HDWTex_xxx.C */
GLI_DRV_vDownLoadTextures = ( void (__cdecl *) (long, long, BOOL) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vDownLoadTextures" );
GLI_DRV_vUnLoadTextures = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vUnLoadTextures" );
GLI_DRV_lGetTextureSize = ( long (__cdecl *) ( GLI_tdstTexture *) ) GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_lGetSizeOfTexture" );
/* init_XXX.c */
GLI_DRV_vFlipDevice = ( void (__cdecl *) (long) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vFlipDevice" );
GLI_DRV_vFlipDeviceWithSyncro = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vFlipDeviceWithSyncro" );
GLI_DRV_vClearDevice = ( void (__cdecl *) (BOOL, BOOL , unsigned long) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vClearDevice" );
GLI_DRV_xInitDriver = ( void (__cdecl *) (HWND, BOOL, long, long, long ) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_xInitDriver" );
GLI_DRV_vCloseDriver = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vCloseDriver" );
GLI_DRV_vClearZBufferRegion = ( void (__cdecl *) (long, long, long, long) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vClearZBufferRegion" );
// GLI_DRV_fn_lEnumerateDisplayMode = ( long (__cdecl *) (void))GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_fn_lEnumerateDisplayMode" );
GLI_DRV_fnl_EnumModes = ( long (__cdecl *) (char*, char* ) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_fnl_EnumModes" );
GLI_DRV_hChangeMode = ( HRESULT (__cdecl *) (BOOL, long, long, long ) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_hChangeMode" );
GLI_DRV_bLockDevice = ( BOOL (__cdecl *) (void **, long *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_bLockDevice" );
GLI_DRV_bUnlockDevice = ( BOOL (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_bUnlockDevice" );
GLI_DRV_bPrepareForGliWindowed = ( BOOL (__cdecl *) (HWND) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_bPrepareForGliWindowed" );
GLI_DRV_vPrepareForGliFullScreen = ( void (__cdecl *) (HWND) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vPrepareForGliFullScreen" );
GLI_DRV_vActivateGli = ( void (__cdecl *) (HWND, BOOL) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vActivateGli" );
GLI_DRV_vReadaptDisplay = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vReadaptDisplay" );
GLI_DRV_bWindowedModeIsOptimized = ( BOOL (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_bWindowedModeIsOptimized" );
GLI_DRV_vOptimizedWindowedMode = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vOptimizedWindowedMode" );
GLI_DRV_vNonOptimizedWindowedMode = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vNonOptimizedWindowedMode" );
GLI_DRV_vSetMainWindowForRender = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vSetMainWindowForRender" );//chbani
GLI_DRV_vRecomputeViewportToMaximizeDisplay = ( void (__cdecl *) (int) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vRecomputeViewportToMaximizeDisplay" );//chbani
/* ClipTriangles */
GLI_DRV_xClearViewingList = ( void (__cdecl *) (void) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_xClearViewingList" );
GLI_DRV_xSendListToViewport = ( void (__cdecl *) (GLD_tdstViewportAttributes *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_xSendListToViewport" );
GLI_DRV_vSetZClip = ( void (__cdecl *) (float ,GLI_tdstInternalGlobalValuesFor3dEngine *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vSetZClip" );
GLI_DRV_vSetClipWindow = ( void (__cdecl *) (float ,float ,float ,float ,GLI_tdstInternalGlobalValuesFor3dEngine *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vSetClipWindow" );
GLI_DRV_xSendElementTIToClip_TRIANGLES = ( void (__cdecl *) (GEO_tdstElementIndexedTriangles *, GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_xSendElementTIToClip_TRIANGLES" );
GLI_DRV_xSendSingleTriangleToClip_TRIANGLES = ( void (__cdecl *) (GLI_tdstAligned2DVector *a3_st2DVertex, ACP_tdst2DUVValues *a3_stUV, GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_xSendSingleTriangleToClip_TRIANGLES" );
/* misc request (see request type n dllcaps.h file) */
GLI_DRV_lRequest = ( long (__cdecl *) ( long, long, long ) ) GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_lRequest" );
#ifndef RETAIL
GLI_DRV_vGetStats = ( void (__cdecl *) (unsigned long *, unsigned long *) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vGetStats" );
#endif
GLI_DRV_vWaitRetrace = ( void (__cdecl *) (void ) )GetProcAddress( GLI_gst_DllInfo.h_Module, "GLI_DRV_vWaitRetrace" );
return 1;
}
/*
----------------------------------------------------------------------------------------
Description : Close driver
----------------------------------------------------------------------------------------
*/
long GLI_fn_lCloseGliDriver( void )
{
FreeLibrary( GLI_gst_DllInfo.h_Module );
return 0;
}
/*
----------------------------------------------------------------------------------------
Description : Set Dll filename
----------------------------------------------------------------------------------------
*/
void GLI_fnv_SetDllFileName( char *_sz_Name )
{
sprintf( GLI_gst_DllInfo.sz_FileName, "dll/%s%s.dll", _sz_Name, C_szVersionSuffix );
}
/*
----------------------------------------------------------------------------------------
Description : set dll name
----------------------------------------------------------------------------------------
*/
void GLI_fnv_SetDllName( char *_sz_Name )
{
strcpy( GLI_gst_DllInfo.sz_Name, _sz_Name );
}
/*
----------------------------------------------------------------------------------------
Description : set driver name
----------------------------------------------------------------------------------------
*/
void GLI_fnv_SetDriverName( char *_sz_Name )
{
strcpy( GLI_gst_DllInfo.sz_DriverName, _sz_Name );
}
/*
----------------------------------------------------------------------------------------
Description : set device name
----------------------------------------------------------------------------------------
*/
void GLI_fnv_SetDeviceName( char *_sz_Name )
{
strcpy( GLI_gst_DllInfo.sz_DeviceName, _sz_Name );
}
/*
----------------------------------------------------------------------------------------
Description : set display mode
----------------------------------------------------------------------------------------
*/
void GLI_fnv_SetMode( long _l_FullScreen, long _l_Width, long _l_Height, long _l_Bpp )
{
GLI_gst_DllInfo.l_InitWidth = _l_Width;
GLI_gst_DllInfo.l_InitHeight = _l_Height;
GLI_gst_DllInfo.l_InitFullScreen = _l_FullScreen;
GLI_gst_DllInfo.l_InitBpp = _l_Bpp;
}
/*
----------------------------------------------------------------------------------------
Description : set display mode (parameters are in a string )
----------------------------------------------------------------------------------------
*/
void GLI_fnv_SetModeByString( char *_sz_Line )
{
GLI_gst_DllInfo.l_InitFullScreen = (*_sz_Line = '1') ? 1 : 0;
if ( ( _sz_Line = strchr( _sz_Line, '-' ) ) == NULL)
return;
GLI_gst_DllInfo.l_InitWidth = atoi( _sz_Line + 1 );
if ( ( _sz_Line = strchr( _sz_Line + 1, 'x' ) ) == NULL)
return;
GLI_gst_DllInfo.l_InitHeight = atoi( _sz_Line + 1 );
if ( ( _sz_Line = strchr( _sz_Line + 1, 'x' ) ) == NULL)
return;
GLI_gst_DllInfo.l_InitBpp = atoi( _sz_Line + 1 );
}
/*
=======================================================================================
Functions to make gateway between other modules (GAM, AI...) and GLI specific
=======================================================================================
*/
void GLI_xClearViewingList ( void )
{
GLI_DRV_xClearViewingList();
}
void GLI_xSendListToViewport( GLD_tdstViewportAttributes *p_stVpt )
{
GLI_DRV_xSendListToViewport( p_stVpt );
}
void GLI_ClearZBufferRegion(long lXStart,long lXEnd,long lYStart,long lYEnd)
{
GLI_DRV_vClearZBufferRegion(lXStart, lXEnd, lYStart, lYEnd);
}
void GLI_vWrite16bBitmapToBackBuffer( void *_p_vSourceBuffer, long _lWidth, long _lHeight, long _lDestLeft, long _lDestTop, long _lDestRight, long _lDestBottom )
{
GLI_DRV_vWrite16bBitmapToBackBuffer( _p_vSourceBuffer, _lWidth, _lHeight, _lDestLeft, _lDestTop, _lDestRight, _lDestBottom );
}
void GLI_fn_vGetStats( unsigned long *_p_ulPixelsSent, unsigned long *_p_ulPixelsDisplayed )
{
GLI_DRV_vGetStats( _p_ulPixelsSent, _p_ulPixelsDisplayed );
}
void GLI_fn_vWaitRetrace(void )
{
GLI_DRV_vWaitRetrace( );
}
void GLI_fn_vDrawMirror( BOOL _bStart )
{
GLI_BIG_GLOBALS->lAMirrorIsDetected = _bStart ? 3 : 0;
}
char GLI_fn_cWindowedModeIsOptimized(void)
{
return (GLI_DRV_bWindowedModeIsOptimized())?1:0;
}
void GLI_fn_vOptimizedWindowedMode(void)
{
GLI_DRV_vOptimizedWindowedMode();
}
void GLI_fn_vNonOptimizedWindowedMode(void)
{
GLI_DRV_vNonOptimizedWindowedMode();
}
void GLI_fn_vRecomputeViewportToMaximizeDisplay(int _arg)
{
GLI_DRV_vRecomputeViewportToMaximizeDisplay(_arg);
}
void GLI_fn_vSetMainWindowForRender(void * _hWnd)
{
GLI_DRV_vSetMainWindowForRender((HWND)_hWnd);
}
/*
=======================================================================================
Access to DLL data
=======================================================================================
*/
long GLI_lWhatIsGLI(void)
{
//return GLI_C_VersionGlide;
return (long) GLI_gst_DllInfo.ul_Code;
}
/*
=======================================================================================
Functions to make gateway between Gli specific and other module (inline functions)
=======================================================================================
*/
void GLI_fn_vPRFIncreaseVariable (unsigned long ulVar, void *p_vUser, unsigned long ulInc)
{
PRF_fn_vIncreaseVariable(ulVar, p_vUser, ulInc );
}
void GLI_fn_vPRFStartChrono (unsigned long _ulVar, void *_p_vUser)
{
PRF_fn_vStartChrono ( _ulVar, _p_vUser);
}
void GLI_fn_vPRFStopChrono (unsigned long _ulVar, void *_p_vUser)
{
PRF_fn_vStopChrono( _ulVar, _p_vUser );
}
/*
=======================================================================================
Functions for memory
=======================================================================================
*/
void *GLI_fn_p_vTmpMalloc( unsigned long _ulSize )
{
void *p_vPointer;
p_vPointer = TMP_M_p_Malloc( _ulSize );
return p_vPointer;
}
void GLI_fn_vTmpFree( void *_p_vPointer )
{
TMP_M_Free(_p_vPointer);
}