299 lines
13 KiB
C
299 lines
13 KiB
C
/*
|
|
=======================================================================================
|
|
Name : light.h
|
|
Description : proto for light functions
|
|
=======================================================================================
|
|
*/
|
|
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
#ifndef LIGHT_H
|
|
#define LIGHT_H
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
|
|
struct GLI_tdstInternalGlobalValuesFor3dEngine_;
|
|
|
|
#include "cpa_expt.h"
|
|
|
|
#include "GLI\GLI_Defn.h" /*pour ISI_tdstColor*/
|
|
|
|
#include "util.h"
|
|
#include "GEO.h"
|
|
#include "GLD.h"
|
|
|
|
#include "SAI.h"
|
|
|
|
#ifndef LIGHT_ST_H
|
|
typedef struct GLI_tdstLight_ GLI_tdstLight;
|
|
#endif
|
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
|
|
/*
|
|
=======================================================================================
|
|
Constants
|
|
=======================================================================================
|
|
*/
|
|
|
|
/*
|
|
* type of ligth
|
|
*/
|
|
#define GLI_C_lParallelLight 1
|
|
#define GLI_C_lSphericalLight 2
|
|
#define GLI_C_lHotSpotLight 3
|
|
#define GLI_C_lAmbientLight 4
|
|
#define GLI_C_lParallelLight_With_Limit 5
|
|
#define GLI_C_lFogLight 6
|
|
|
|
/*
|
|
* what is Lighted
|
|
*/
|
|
#define GLI_C_LightMap 0x01
|
|
#define GLI_C_LightPerso 0x02
|
|
|
|
/*
|
|
* state of ligth
|
|
*/
|
|
#define GLI_C_ActivateLight 1
|
|
#define GLI_C_DisactivateLight 0
|
|
|
|
/*
|
|
* number max of fog at same time
|
|
*/
|
|
#define GLI_C_lMaxFog 16
|
|
|
|
/*
|
|
=======================================================================================
|
|
Structure
|
|
=======================================================================================
|
|
*/
|
|
|
|
/*
|
|
* to store fog parameter
|
|
*/
|
|
typedef struct tdstFogParams_
|
|
{
|
|
MTH_tdxReal xDepthStart;
|
|
MTH_tdxReal xDepthEnd;
|
|
MTH_tdxReal xInfinite;
|
|
MTH_tdxReal xBlendStart;
|
|
MTH_tdxReal xBlendEnd;
|
|
GEO_tdstColor stColor;
|
|
} tdstFogParams;
|
|
|
|
|
|
|
|
/*
|
|
=======================================================================================
|
|
Globals
|
|
=======================================================================================
|
|
*/
|
|
/*
|
|
* for fog
|
|
*/
|
|
extern CPA_EXPORT char GLI_cGlobalFogIsOn;
|
|
|
|
extern CPA_EXPORT MTH_tdxReal GLI_xFogNear;
|
|
extern CPA_EXPORT MTH_tdxReal GLI_xFogFar;
|
|
extern CPA_EXPORT MTH_tdxReal GLI_xFogInfinite;
|
|
extern CPA_EXPORT MTH_tdxReal GLI_xFogBlendNear;
|
|
extern CPA_EXPORT MTH_tdxReal GLI_xFogBlendFar;
|
|
/*YLG*/
|
|
extern CPA_EXPORT GEO_tdstColor GLI_stFogColor;
|
|
extern CPA_EXPORT ACP_tdxBool GLI_g_bSaveFog;
|
|
|
|
extern CPA_EXPORT tdstFogParams GLI_g_stSaveFog;
|
|
extern CPA_EXPORT tdstFogParams GLI_g_stGlobalFog;
|
|
extern CPA_EXPORT tdstFogParams GLI_ga_stFogTable[ GLI_C_lMaxFog ];
|
|
extern CPA_EXPORT tdstFogParams *GLI_gp_stLastFog;
|
|
extern CPA_EXPORT tdstFogParams *GLI_gp_stActiveFog;
|
|
extern CPA_EXPORT tdstFogParams *GLI_gp_stLastComputedFog;
|
|
|
|
extern CPA_EXPORT GLI_tdstLight *GLI_pstCurrentFogLight ;
|
|
extern CPA_EXPORT long GLI_lUseGlobalFog ;
|
|
|
|
extern float xZDepthStart,xZDepthEnd;
|
|
extern ACP_tdxIndex xFogIsOn;
|
|
extern GEO_tdstColor stColorDepthCuing;
|
|
|
|
|
|
/*
|
|
* for PLG files
|
|
*/
|
|
#ifdef ACTIVE_EDITOR
|
|
extern ISI_tdstObjectColorStruct m_ObjectColorStruct;
|
|
#endif
|
|
|
|
/*
|
|
=======================================================================================
|
|
Manage with table of active light for charachter
|
|
=======================================================================================
|
|
*/
|
|
extern CPA_EXPORT void GLI_vResetTableOfActiveLightsForChar(char _cValue);
|
|
|
|
void GLI_vSetLightActivityForChar( int iNum, unsigned char ucState );
|
|
ACP_tdxBool GLI_bIsLightActiveForChar( int iNum );
|
|
ACP_tdxBool GLI_bDoesLightAffectBV( GLI_tdstLight * p_stLight, MTH3D_tdstVector * p_stCenter, MTH_tdxReal xRadius );
|
|
|
|
/*
|
|
=======================================================================================
|
|
ZBuffer
|
|
=======================================================================================
|
|
*/
|
|
extern CPA_EXPORT long GLI_vIsLightZbufferLight(struct GLI_tdstLight_ *p_stLight);
|
|
extern CPA_EXPORT void GLI_vSetLightAsZBufferLight(struct GLI_tdstLight_ *p_stLight , long bEnbleDisable);
|
|
extern CPA_EXPORT long GLI_bAssignZBufferToLight(struct GLI_tdstLight_ *p_stLight , long lZBufferSizeX,long lZBufferSizeY,float *p_ZBuffer);
|
|
extern CPA_EXPORT long GLI_lCreateZBufferForLight(void **p_BufferToCreate, long lSizeX,long lSizeY,struct GLI_tdstLight_ *p_stLight );
|
|
extern CPA_EXPORT BOOL GLI_bLightBufferisNotBuilding(struct GLI_tdstLight_ *p_stLight);
|
|
extern CPA_EXPORT float *GLI_p_GetPtrOfZBuffer(struct GLI_tdstLight_ *p_stLight , long lFaceNumberOfCubeForSphericalLight);
|
|
extern CPA_EXPORT long GLI_p_GetNumberOfIterationForBuildZBufferOfALight(struct GLI_tdstLight_ *p_stLight );
|
|
|
|
/*
|
|
=======================================================================================
|
|
List of ligth
|
|
=======================================================================================
|
|
*/
|
|
extern CPA_EXPORT void GLI_vAddLightToViewport(struct GLD_tdstViewportAttributes_ *p_stVpt , struct GLI_tdstLight_ *p_stLight );
|
|
extern CPA_EXPORT void GLI_vPopLightsInViewport(struct GLD_tdstViewportAttributes_ *p_stVpt , unsigned long lNbLightsToPop);
|
|
extern CPA_EXPORT void GLI_xSetViewportLightsOnOff(unsigned char bOnOff);
|
|
extern CPA_EXPORT void GLI_vClearListOfLightInViewport (struct GLD_tdstViewportAttributes_ *p_stVpt);
|
|
|
|
/*
|
|
=======================================================================================
|
|
Creation of light
|
|
=======================================================================================
|
|
*/
|
|
extern CPA_EXPORT void GLI_xCreateLight ( struct GLI_tdstLight_ **h_stLight , long lTypeOfThis ) ;
|
|
extern CPA_EXPORT void GLI_vCopyLight(struct GLI_tdstLight_ *p_stLightDst,struct GLI_tdstLight_ *p_stLightSrc);
|
|
extern CPA_EXPORT unsigned long GLI_ulGetLightSize();
|
|
|
|
/*
|
|
=======================================================================================
|
|
Save light
|
|
=======================================================================================
|
|
*/
|
|
extern CPA_EXPORT void GLI_vStoreLightForInit(struct GLI_tdstLight_ *p_stLight,SAI_tdeFlags eUserFlags);
|
|
extern CPA_EXPORT void GLI_vRemoveLightForInit(struct GLI_tdstLight_ *p_stLight,SAI_tdeFlags eUserFlags);
|
|
extern CPA_EXPORT void GLI_vReInitLight(struct GLI_tdstLight_ *p_stLight,SAI_tdeFlags eUserFlags);
|
|
|
|
/*
|
|
=======================================================================================
|
|
Ligth structure access function
|
|
=======================================================================================
|
|
*/
|
|
|
|
extern CPA_EXPORT void GLI_vComputeLight_SphereBox (struct GLI_tdstLight_ *p_stLight);
|
|
|
|
extern CPA_EXPORT void GLI_xSetLightState ( struct GLI_tdstLight_ *p_stLight , long b_lOnOff ) ;
|
|
extern CPA_EXPORT void GLI_xGetLightState ( struct GLI_tdstLight_ *p_stLight , long *pb_lOnOff ) ;
|
|
|
|
extern CPA_EXPORT void GLI_xSetLightColor ( struct GLI_tdstLight_ *p_stLight , struct GEO_tdstColor_ *p_stColor ) ;
|
|
extern CPA_EXPORT void GLI_xGetLightColor ( struct GLI_tdstLight_ *p_stLight , struct GEO_tdstColor_ *p_stColor ) ;
|
|
|
|
extern CPA_EXPORT void GLI_xGetLightMatrix ( struct GLI_tdstLight_ *p_stLight , struct POS_stCompletePosition *p_stMatrix ) ;
|
|
extern CPA_EXPORT void GLI_xSetLightMatrix ( struct GLI_tdstLight_ *p_stLight , struct POS_stCompletePosition *p_stMatrix ) ;
|
|
extern CPA_EXPORT MTH3D_tdstVector *GLI_p_stGetLightTranslation(struct GLI_tdstLight_ *p_stLight);
|
|
|
|
extern CPA_EXPORT void GLI_vSetLightNearFar ( struct GLI_tdstLight_ *p_stLight , MTH_tdxReal xNear, MTH_tdxReal xFar ) ;
|
|
extern CPA_EXPORT void GLI_vGetLightNearFar ( struct GLI_tdstLight_ *p_stLight , MTH_tdxReal *p_xNear, MTH_tdxReal *p_xFar ) ;
|
|
|
|
extern CPA_EXPORT void GLI_vSetLightAlphas ( struct GLI_tdstLight_ *p_stLight , MTH_tdxReal xLittleAlpha, MTH_tdxReal xBigAlpha);
|
|
extern CPA_EXPORT void GLI_vGetLightAlphas ( struct GLI_tdstLight_ *p_stLight , MTH_tdxReal *p_xLittleAlpha, MTH_tdxReal *p_xBigAlpha);
|
|
|
|
extern CPA_EXPORT long GLI_lGetLightType(struct GLI_tdstLight_ *p_stLight );
|
|
extern CPA_EXPORT void GLI_vSetLightType (struct GLI_tdstLight_ *p_stLight ,long lNewType);
|
|
|
|
extern CPA_EXPORT void GLI_vSetPaintingLightFlag (struct GLI_tdstLight_ *p_stLight, long bIsPainting) ;
|
|
extern CPA_EXPORT unsigned char GLI_ucGetPaintingLightFlag (struct GLI_tdstLight_ *p_stLight) ;
|
|
extern CPA_EXPORT void GLI_vSetPaintLight( struct GLI_tdstLight_ *p_stLight);
|
|
|
|
extern CPA_EXPORT void GLI_vSetAlphaLightFlag (struct GLI_tdstLight_ *p_stLight, long bIsAlpha) ;
|
|
extern CPA_EXPORT unsigned char GLI_ucGetAlphaLightFlag (struct GLI_tdstLight_ *p_stLight) ;
|
|
extern CPA_EXPORT void GLI_vSetAlphaLight(struct GLI_tdstLight_ *p_stLight);
|
|
|
|
extern CPA_EXPORT void GLI_xSetLightBackgroundColor ( struct GLI_tdstLight_ *p_stLight , struct GEO_tdstColor_ *p_stColor ) ;
|
|
extern CPA_EXPORT void GLI_xGetLightBackgroundColor ( struct GLI_tdstLight_ *p_stLight , struct GEO_tdstColor_ *p_stColor ) ;
|
|
|
|
extern CPA_EXPORT void GLI_vSetLight_Intensity_Min_Max (struct GLI_tdstLight_ *p_stLight , MTH_tdxReal xIntensity_Min, MTH_tdxReal xIntensity_Max );
|
|
extern CPA_EXPORT void GLI_vGetLight_Intensity_Min_Max (struct GLI_tdstLight_ *p_stLight , MTH_tdxReal * xIntensity_Min, MTH_tdxReal * xIntensity_Max );
|
|
|
|
extern CPA_EXPORT void GLI_vSetLight_Exter_Max_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector xExter_Max_Pos);
|
|
extern CPA_EXPORT void GLI_vSetLight_Exter_Min_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector xExter_Min_Pos);
|
|
extern CPA_EXPORT void GLI_vSetLight_Inter_Max_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector xInter_Max_Pos);
|
|
extern CPA_EXPORT void GLI_vSetLight_Inter_Min_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector xInter_Min_Pos);
|
|
extern CPA_EXPORT void GLI_vGetLight_Exter_Max_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector *xExter_Max_Pos);
|
|
extern CPA_EXPORT void GLI_vGetLight_Exter_Min_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector *xExter_Min_Pos);
|
|
extern CPA_EXPORT void GLI_vGetLight_Inter_Max_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector *xInter_Max_Pos);
|
|
extern CPA_EXPORT void GLI_vGetLight_Inter_Min_Pos (struct GLI_tdstLight_ *p_stLight , MTH3D_tdstVector *xInter_Min_Pos);
|
|
|
|
extern CPA_EXPORT unsigned char GLI_ucGetObjectLighted( struct GLI_tdstLight_ *p_stLight) ;
|
|
extern CPA_EXPORT void GLI_vSetLightMap( struct GLI_tdstLight_ *p_stLight , unsigned char bLightMap) ;
|
|
extern CPA_EXPORT void GLI_vSetLightPerso( struct GLI_tdstLight_ *p_stLight , unsigned char bLightPerso) ;
|
|
extern CPA_EXPORT void GLI_vSetObjectLighted( struct GLI_tdstLight_ *p_stLight , unsigned char ucObjectLighted) ;
|
|
|
|
extern CPA_EXPORT void GLI_fn_vFogSetNear(struct GLI_tdstLight_ *p_stLight, MTH_tdxReal);
|
|
extern CPA_EXPORT MTH_tdxReal GLI_fn_xFogGetNear(struct GLI_tdstLight_ *p_stLight);
|
|
extern CPA_EXPORT void GLI_fn_vFogSetFar(struct GLI_tdstLight_ *p_stLight, MTH_tdxReal);
|
|
extern CPA_EXPORT MTH_tdxReal GLI_fn_xFogGetFar(struct GLI_tdstLight_ *p_stLight);
|
|
extern CPA_EXPORT void GLI_fn_vFogSetInfinite(struct GLI_tdstLight_ *p_stLight, MTH_tdxReal);
|
|
extern CPA_EXPORT MTH_tdxReal GLI_fn_xFogGetInfinite(struct GLI_tdstLight_ *p_stLight);
|
|
extern CPA_EXPORT void GLI_fn_vFogSetBlendNear(struct GLI_tdstLight_ *p_stLight, MTH_tdxReal);
|
|
extern CPA_EXPORT MTH_tdxReal GLI_fn_xFogGetBlendNear(struct GLI_tdstLight_ *p_stLight);
|
|
extern CPA_EXPORT void GLI_fn_vFogSetBlendFar(struct GLI_tdstLight_ *p_stLight, MTH_tdxReal);
|
|
extern CPA_EXPORT MTH_tdxReal GLI_fn_xFogGetBlendFar(struct GLI_tdstLight_ *p_stLight);
|
|
|
|
|
|
/*
|
|
=======================================================================================
|
|
compute light
|
|
=======================================================================================
|
|
*/
|
|
|
|
extern CPA_EXPORT void GLI_vSendObjectToLights
|
|
(
|
|
struct GLI_tdstLight_ **p_stLight ,
|
|
struct GEO_tdstGeometricObject_ *p_stObject ,
|
|
struct GEO_tdstColor_ *p_stColorRLID ,
|
|
struct GEO_tdstColor_ *p_stColorRLIS ,
|
|
struct GEO_tdstColor_ *p_stColorRLIA ,
|
|
long lNumberOfLights,
|
|
struct GLI_tdstInternalGlobalValuesFor3dEngine_ *p_stGlobaleMT
|
|
);
|
|
|
|
/*
|
|
=======================================================================================
|
|
Other (RLI buffer, Init)
|
|
=======================================================================================
|
|
*/
|
|
extern CPA_EXPORT void GLI_vSpecularOn();
|
|
extern CPA_EXPORT void GLI_vSpecularOff();
|
|
|
|
void GLI_vCopyRLI2ComputeBuffer(struct GLI_tdstInternalGlobalValuesFor3dEngine_ *p_stGlobalsParrameters, GEO_tdstColor *p_stColorRLID , long xStart , long lNumber);
|
|
void GLI_vCopyRLI2ComputeBufferISI(struct GLI_tdstInternalGlobalValuesFor3dEngine_ *p_stGlobalsParrameters, ISI_tdstColor *p_stColorRLID , long xStart , long lNumber);
|
|
void GLI_vInitSpecularAndAmbiamt(struct GLI_tdstInternalGlobalValuesFor3dEngine_ *p_stGlobaleMT );
|
|
|
|
|
|
/*
|
|
=======================================================================================
|
|
fog ( in fog.c )
|
|
=======================================================================================
|
|
*/
|
|
|
|
extern CPA_EXPORT void GLI_vSetFog (GLI_tdxValue xDepthStart, GLI_tdxValue xDepthEnd, GLI_tdxValue xInfinite , GEO_tdstColor *p_stFogColor);
|
|
extern CPA_EXPORT void GLI_vSetFog2(GLI_tdxValue xBlendStart, GLI_tdxValue xDepthStart, GLI_tdxValue xBlendEnd, GLI_tdxValue xDepthEnd, GLI_tdxValue xInfinite, GEO_tdstColor *p_stFogColor);
|
|
|
|
extern CPA_EXPORT void GLI_vGetFog(GLI_tdxValue *p_xDepthStart, GLI_tdxValue *p_xDepthEnd, GEO_tdstColor *p_stFogColor);
|
|
|
|
extern CPA_EXPORT void GLI_vFogOn();
|
|
extern CPA_EXPORT void GLI_vFogOff();
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* LIGHT_H*/
|