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

250 lines
7.7 KiB
C

/*
=======================================================================================
Name : Init_Gli.c
Author : Philippe Vimont
Description : Init/close Gli + misc functions
=======================================================================================
Modification -> Author : Date :
Description :
=======================================================================================
*/
#define MAIN_GLI
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "init_gli.h"
#include "gli_st.h"
#include "GLI_Defn.h"
#include "light_st.h"
#include "PvObj_st.h"
#include "material.h"
#include "linktab.h"
#include "Liste.h"
#include "watrplan.h"
#include "Priv_Obj.h"
#include "matstack.h"
#include "light.h"
#include "Object.h"
#include "texture.h"
#include "TMR.h"
#include "PRF.h"
#include "DLLInter.h"
#include "DispMode.h"
#include "GliText.h"
#include "DLLCaps.h"
#include "Tex.h"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
=======================================================================================
Constants
=======================================================================================
*/
/* Defined in TMR\Timer.cxx */
extern u_long fn_ulTimerTickPerSecond(short wTimerType);
extern ACP_tdxHandleOfMaterial gs_hDefaultMaterial;
static long GLI_gsIsInit = 0;
//float gs_xConstantFor3dfxBugFloat;
/*
=======================================================================================
External
=======================================================================================
*/
extern HWND fn_hGetApplicationWindow(void);
extern void GLI_vInitLensFlare(void) ;
extern void TEX_vSaveGlobales();
extern void TEX_vLoadGlobales();
extern void TEX_vSaveGlobalesFix();
extern void TEX_vLoadGlobalesFix();
#ifdef EXGEOM_APPLI
#define fn_vInitFrameLenght()
#else
void fn_vInitFrameLenght (void);
#endif
extern unsigned char g_ucMemorySnapshot;
extern char g_bSaveLoadFix;
extern unsigned long GLI_g_ulFrameLength;
extern GLI_tdstInternalGlobalValuesFor3dEngine * GLI_BIG_GLOBALS;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifdef __cplusplus
extern "C"
{
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/* End of turn engine.*/
/*
void GLI_vEndOfTurnEngine(void)
{
}
*/
/*
=======================================================================================
Gli initialisation function
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : initialize gli data
----------------------------------------------------------------------------------------
*/
void GLI_xInitGli (void)
{
static long lFirst = 1;
if (lFirst)
{
lFirst = 0;
/*
GLI_g_ulFrameLength = (long) ( ((float) fn_ulTimerTickPerSecond( C_wTimerFrequencyHigh )) / 60.0f );
*/
MMG_fn_vAddMemoryInfo (MMG_C_lTypeGLI , MMG_C_lSubTypeGlobal , NULL);
GLI_BIG_GLOBALS = (GLI_tdstInternalGlobalValuesFor3dEngine *)TMP_M_p_Malloc(sizeof(GLI_tdstInternalGlobalValuesFor3dEngine));
GLI_BIG_GLOBALS->GLD_RenderingCounter = -1;
GLI_BIG_GLOBALS->p_stActiveFog = NULL;
GLI_BIG_GLOBALS->p_stLastComputedFog = NULL;
GLI_BIG_GLOBALS->xFogIsOn = 0;
GLI_BIG_GLOBALS->lAMirrorIsDetected = 0;
GLI_BIG_GLOBALS->bDrawMirrorSymetric = 0;
GLI_BIG_GLOBALS->lDisplayMenuIsDetected = 0;
GLI_BIG_GLOBALS->xGlobalAlpha = 0.0f;
GLI_DRV_lSendDataToDll("GliBigGlobals", GLI_BIG_GLOBALS);
GLI_xCreateMaterial( &gs_hDefaultMaterial); /* little bug.*/
GLI_vIniTextRead();
GLI_vCreateObjectsReference();/* create collision visual objects.*/
//GLI_fn_vInitText();
GLI_vInitWaterplaneModule();
GLI_vSpecularOff();
GLI_vInitLensFlare() ;
GLI_xInitMatrixStack();
}
GLI_BIG_GLOBALS -> p_TheZListe = NULL;
GLI_g_stCaps.fRefreshRate = 0.0f;
GLI_DRV_xInitDriver( fn_hGetApplicationWindow(), GLI_fn_lIsFullScreenMode(), GLI_fn_lDisplayModeWidth(), GLI_fn_lDisplayModeHeight(), GLI_fn_lDisplayModeBPP() );
if ( (GLI_g_stCaps.fRefreshRate < 40.0f) || (GLI_g_stCaps.fRefreshRate >= 210.0f ) )
GLI_g_stCaps.fRefreshRate = 60.0f;
/* compute video frame length (for flip with synchro and meca) */
GLI_g_ulFrameLength = (long) ( (float) fn_ulTimerTickPerSecond( C_wTimerFrequencyMedium ) / GLI_g_stCaps.fRefreshRate );
/*GLI_g_ulFrameLength = (long) ( ((float) fn_ulTimerTickPerSecond( C_wTimerFrequencyMedium )) / 60.0f );*/
fn_vInitFrameLenght();
PRF_fn_vUpdateMonitorFrequency( (unsigned long)GLI_g_stCaps.fRefreshRate );
GLI_gsIsInit = 1;
}
/*
----------------------------------------------------------------------------------------
Description : close driver
----------------------------------------------------------------------------------------
*/
void GLI_vCloseGli( void )
{
GLI_gsIsInit = 0;
GLI_DRV_vCloseDriver();
}
/*
----------------------------------------------------------------------------------------
Description : return non zero if gli is initialized
----------------------------------------------------------------------------------------
*/
long GLI_xIsGliInit()
{
return GLI_gsIsInit;
}
/*
=======================================================================================
Other functions
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : called after all graphic data are loaded
----------------------------------------------------------------------------------------
*/
void GLI_vEndofGeometricLoad()
{
if (g_ucMemorySnapshot == 2)
{
if(!g_bSaveLoadFix)
{
TEX_vSaveGlobales(); /* Save binary data's*/
}
else
{
TEX_vSaveGlobalesFix();
}
}
if (g_ucMemorySnapshot == 1)
{
if(!g_bSaveLoadFix)
{
TEX_vLoadGlobales(); /* Load binary data's*/
}
else
{
TEX_vLoadGlobalesFix();
}
}
/*
* load textures
*/
GLI_vComputeTextures ();
}
/*
----------------------------------------------------------------------------------------
Description : memory signal (to change memory channel)
----------------------------------------------------------------------------------------
*/
void GLI_vSignalCurrentMemoryChannel(unsigned char ucCurrentChannel)
{
GLI_TEX_vSignalCurrentMemoryChannel(ucCurrentChannel);
}
/*
----------------------------------------------------------------------------------------
Description : memory signal (to free memory channel)
----------------------------------------------------------------------------------------
*/
void GLI_vKillMemoryChannel(unsigned char ucCurrentChannel)
{
GLI_TEX_vKillMemoryChannel(ucCurrentChannel);
}
/*
----------------------------------------------------------------------------------------
Description : draw a bar (not implemented : called by rasters display)
----------------------------------------------------------------------------------------
*/
void GLI_vDrawBar (long _lX0, long _lY0, long _lLength, long _lHeight)
{
}
#ifdef __cplusplus
} /*extern "C"*/
#endif