Add rayman2 source files

This commit is contained in:
2024-09-18 02:33:44 +08:00
parent bcc093f8ed
commit fb036c54fd
14339 changed files with 2596224 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
#include <kamui.h>
/* GET*/
#define GetX(a) a.fX
#define GetY(a) a.fY
#define GetZ(a) a.fZ
#define GetPackedColor(a) *(unsigned long *)&a.uBaseRGB
#define GetU(a) a.fU
#define GetV(a) a.fV
/* SET*/
#define SetX(a,b) a.fX = b
#define SetY(a,b) a.fY = b
#define SetZ(a,b) a.fZ = b
#define SetPackedColor(a,b) *(unsigned long *)&a.uBaseRGB = b
#define SetPackedSpecular(a,b)
#define SetU(a,b) a.fU = b
#define SetV(a,b) a.fV = b
#define SetU_Cpy(a,b) *(unsigned long *)&a.fU = *(unsigned long *)&b
#define SetV_Cpy(a,b) *(unsigned long *)&a.fV = *(unsigned long *)&b
/* GLOBALS*/
#define GLI_tdScreenVertx KMVERTEX_03
extern KMVERTEXBUFFDESC VertexBufferDesc;
KMVERTEX_03 CurrentDestXYZ[4];
/* Special functions*/
#define GLI_M_RestoreCW()\
{\
CurrentDestXYZ[0].ParamControlWord = \
CurrentDestXYZ[1].ParamControlWord = \
CurrentDestXYZ[3].ParamControlWord = KM_VERTEXPARAM_NORMAL;\
CurrentDestXYZ[2].ParamControlWord = KM_VERTEXPARAM_ENDOFSTRIP;\
}\
static void GLI_BeforeDraw()
{
GLI_M_RestoreCW();
};
#define GLI_AfterDraw()
static void GLI_DrawQuad(void)
{
kmSetVertex(&VertexBufferDesc,&CurrentDestXYZ[0],KM_VERTEXTYPE_03,sizeof(CurrentDestXYZ[1]));
kmSetVertex(&VertexBufferDesc,&CurrentDestXYZ[1],KM_VERTEXTYPE_03,sizeof(CurrentDestXYZ[1]));
kmSetVertex(&VertexBufferDesc,&CurrentDestXYZ[3],KM_VERTEXTYPE_03,sizeof(CurrentDestXYZ[1]));
kmSetVertex(&VertexBufferDesc,&CurrentDestXYZ[2],KM_VERTEXTYPE_03,sizeof(CurrentDestXYZ[1]));
}
/* Draw Triangle*/
GLI_FuncNodeBegin(GLI_vDrawTriangle)
{
kmSetVertex(&VertexBufferDesc,&CurrentDestXYZ[0],KM_VERTEXTYPE_03,3*sizeof(CurrentDestXYZ[0]));
}
void GLI_vDrawZSortedTriangle(void *p_3Point)
{
}
void GLI_vDrawZSortedQuad(void *p_3Point)
{
}
void GLI_vAddDrawFunc()
{
GLI_M_AddFunc(GLI_vDrawTriangle);
}
/* GLI_BIG_GLOBALS -> lClippingModeMask*/
void GLI_ReComputeClippingMask()
{
*(float *)&fX_CMP_Optimize = 640.0f;
*(float *)&fY_CMP_Optimize = 480.0f;
*(float *)&fXMin_CLIP_Optimize = 100.0f;
*(float *)&fYMin_CLIP_Optimize = 50.0f;
*(float *)&fXMax_CLIP_Optimize = 540.0f;
*(float *)&fYMax_CLIP_Optimize = 430.0f;
}
/**********************************************************************************************/
/* Name: GLI_DRV_vSendSpriteToClip*/
/* Goal: draw a sprite*/
/* Code: Philippe Vimont */
/* OPTIMMIZED : No*/
/**********************************************************************************************/
void GLI_DRV_vSendSpriteToClip
(
GLI_tdstAligned2DVector *a4_st2DVertex ,
MTH_tdxReal xZ ,
GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT)
{
GLI_BeforeDraw();
GLI_M_InitSprite();
SetU(CurrentDestXYZ[0],0.0f);
SetV(CurrentDestXYZ[0],1.0f);
SetU(CurrentDestXYZ[1],1.0f);
SetV(CurrentDestXYZ[1],1.0f);
SetU(CurrentDestXYZ[2],1.0f);
SetV(CurrentDestXYZ[2],0.0f);
SetU(CurrentDestXYZ[3],0.0f);
SetV(CurrentDestXYZ[3],0.0f);
GLI_DrawQuad();
GLI_AfterDraw();
}
/**********************************************************************************************/
/* Name: GLI_DRV_vSendSpriteToClipWithUV 1.0*/
/* Goal: */
/* Code: Philippe Vimont / 1.0*/
/* REM: */
/* OPTIMMIZED : No*/
/**********************************************************************************************/
void GLI_DRV_vSendSpriteToClipWithUV
(
GLI_tdstAligned2DVector *a4_st2DVertex ,
MTH_tdxReal *a8_stUVVertex,
MTH_tdxReal xZ ,
GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT)
{
GLI_BeforeDraw();
GLI_M_InitSprite();
SetU(CurrentDestXYZ[2],a8_stUVVertex[4]);
SetV(CurrentDestXYZ[2],a8_stUVVertex[4+1]);
SetU(CurrentDestXYZ[3],a8_stUVVertex[6]);
SetV(CurrentDestXYZ[3],a8_stUVVertex[6+1]);
SetU(CurrentDestXYZ[0],a8_stUVVertex[0]);
SetV(CurrentDestXYZ[0],a8_stUVVertex[0+1]);
SetU(CurrentDestXYZ[1],a8_stUVVertex[2]);
SetV(CurrentDestXYZ[1],a8_stUVVertex[2+1]);
GLI_DrawQuad();
GLI_AfterDraw();
}

View File

@@ -0,0 +1,374 @@
/******************************************************************************************
FILE : CLIPDomat.C
VERS : 1.00 \ Marc Villemain - version directX5
0.00 \ Philippe Vimont
DATE : 15.05.97
Select materials
*******************************************************************************************/
#include "Gli_st.h"
#include "GLI_Defn.h"
#include "polygon.h"
#include "mater_st.h"
#include "light_st.h"
#include "PvObj_st.h"
#include "ScrVert.h"
#include "Liste.h"
#include "SelecTex.h"
#include "watrplan.h"
#include "proj.h"
#include "vpt3D.h"
#include "camera.h"
#include "material.h"
#include "texture.h"
#include "GliBench.h
#include <kamui.h>
#include "GLI_interface.h"
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef ZARMA
}
#endif
extern KMVERTEXBUFFDESC VertexBufferDesc;
/*extern long GLD_RenderingCounter;*/
extern KMVERTEX_03 CurrentDestXYZ[4];
extern long TRYIT;
extern GLI_tdxValue xZFogDepth;
/*extern GEO_tdstColor stColorDepthCuing;*/
/*extern float xZDepthStart,xZDepthEnd,xZDepthConstant;*/
/*extern float xFogIntensityStart;*/
/*extern float xFogIntensityEnd;*/
/*extern GLI_tdxValue xDepthStartSave,xZDepthEndSave;*/
extern KMSURFACEDESC stSpecialTexture;
extern KMSURFACEDESC stSpecialTexture20;
extern KMSURFACEDESC stSpecialTexture21;
extern KMVERTEXCONTEXT stRenderingContex;
void GLI_fnSwitchTwiddled(short *p_Texture , long size );
short VignetteBuffer[1024L * 1024L];
/*static long bisready = 0;*/
/*void ZZZGLI_ZOOOOOOOOOOOORRRRRRGGGLL();*/
#define GLI_M_ChangeRenderingParrameter( Renderingflag, Renderingvar, Renderingval) \
{\
if (stRenderingContex . Renderingvar != (Renderingval))\
{\
stRenderingContex . RenderState |= (Renderingflag);\
stRenderingContex . Renderingvar = (Renderingval);\
}\
}
void GLI_BigInitKamuiRendering(GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT)
{
memset( &stRenderingContex, 0, sizeof(stRenderingContex)); /* Crear Context*/
stRenderingContex . RenderState = KM_DEPTHMODE | KM_CULLINGMODE | KM_SCREENCOORDINATION | KM_SHADINGMODE | KM_MODIFIER | KM_ZWRITEDISABLE | KM_SRCBLENDINGMODE | KM_DSTBLENDINGMODE| KM_SRCSELECT | KM_DSTSELECT| KM_FOGMODE | KM_USESPECULAR| KM_USEALPHA | KM_IGNORETEXTUREALPHA| KM_FLIPUV | KM_CLAMPUV| KM_FILTERMODE | KM_SUPERSAMPLE | KM_MIPMAPDADJUST | KM_TEXTURESHADINGMODE| KM_PARAMTYPE | KM_LISTTYPE | KM_COLORTYPE | KM_USESPECULAR| KM_UVFORMAT;
stRenderingContex . ParamType = KM_POLYGON;
stRenderingContex . ListType = KM_OPAQUE_POLYGON;
stRenderingContex . ColorType = KM_PACKEDCOLOR;/*KM_FLOATINGCOLOR;*/
stRenderingContex . bUseSpecular = FALSE;/*TRUE;*/
stRenderingContex . UVFormat = KM_32BITUV;
stRenderingContex . DepthMode = KM_GREATER;
stRenderingContex . CullingMode = KM_NOCULLING;
stRenderingContex . ScreenCoordination = KM_SCREEN;/*KM_PROJECTIVE;//KM_SCREEN;*/
stRenderingContex . ShadingMode = KM_NOTEXTUREGOURAUD;
stRenderingContex . SelectModifier = KM_NOMODIFIER;
stRenderingContex . bZWriteDisable = FALSE;
stRenderingContex . SRCBlendingMode = KM_ONE;
stRenderingContex . DSTBlendingMode = KM_ZERO;
stRenderingContex . bSRCSel = FALSE;
stRenderingContex . bDSTSel = FALSE;
stRenderingContex . FogMode = KM_NOFOG;
stRenderingContex . FogMode = KM_FOGTABLE;
stRenderingContex . bUseSpecular = FALSE;
stRenderingContex . bUseAlpha = FALSE;
stRenderingContex . FlipUV = KM_NOFLIP;
stRenderingContex . ClampUV = KM_CLAMP_UV;/*KM_NOCLAMP;*/
stRenderingContex . FilterMode = KM_BILINEAR;/*KM_POINT_SAMPLE;*/
stRenderingContex . bSuperSample = FALSE;
stRenderingContex . MipMapAdjust = 0x00000003;
stRenderingContex . TextureShadingMode = KM_MODULATE_ALPHA;
stRenderingContex . bColorClamp = FALSE;
stRenderingContex . PaletteBank = 0;
stRenderingContex . fFaceColorAlpha = 1.0f;
stRenderingContex . fFaceColorRed = 1.0f;
stRenderingContex . fFaceColorGreen = 1.0f;
stRenderingContex . fFaceColorBlue = 1.0f;
stRenderingContex . fOffsetColorAlpha = 1.0f;
stRenderingContex . fOffsetColorRed = 1.0f;
stRenderingContex . fOffsetColorGreen = 1.0f;
stRenderingContex . fOffsetColorBlue = 1.0f;
kmProcessVertexRenderState(&stRenderingContex);
}
void GLI_INTERFACE_FUNC(GLI_vDoTextureSelection)(GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT)
{
static bFirst = 0;
if (*GLD_p_lRenderingCounter != p_stGlobaleMT->GLD_RenderingCounter)
{
p_stGlobaleMT->GLD_RenderingCounter = *GLD_p_lRenderingCounter;
}
if (!bFirst)
{
bFirst = 1;
GLI_BigInitKamuiRendering(p_stGlobaleMT);
}
stRenderingContex . RenderState = 0;
if (GLI_BIG_GLOBALS->xFogIsOn)
{
if ( GLI_BIG_GLOBALS->p_stLastComputedFog != GLI_BIG_GLOBALS->p_stActiveFog )
{
GLI_vSetFogParams( GLI_BIG_GLOBALS->p_stActiveFog );
GLI_BIG_GLOBALS->p_stLastComputedFog = GLI_BIG_GLOBALS->p_stActiveFog;
}
GLI_M_ChangeRenderingParrameter(KM_FOGMODE , FogMode , KM_FOGTABLE);
}
else
{
GLI_M_ChangeRenderingParrameter(KM_FOGMODE , FogMode , KM_NOFOG);
}
if (p_stGlobaleMT -> lCurrentDrawMask & GLI_C_lIsTestingBackface)
{
if (p_stGlobaleMT -> lCurrentDrawMask & GLI_C_lNotInvertBackfaces)
{
GLI_M_ChangeRenderingParrameter(KM_CULLINGMODE , CullingMode ,KM_CULLCW);
}
else
{
GLI_M_ChangeRenderingParrameter(KM_CULLINGMODE , CullingMode ,KM_CULLCCW);
}
}
else
GLI_M_ChangeRenderingParrameter(KM_CULLINGMODE , CullingMode ,KM_NOCULLING);
if (GLI_BIG_GLOBALS->lAMirrorIsDetected & 2)
{
GLI_M_ChangeRenderingParrameter(KM_FILTERMODE , FilterMode , KM_POINT_SAMPLE);
GLI_M_ChangeRenderingParrameter(KM_SHADINGMODE , ShadingMode ,KM_TEXTUREGOURAUD);
if ((!(p_stGlobaleMT -> lCurrentDrawMask & GLI_C_lIsNotGrided)) && (p_stGlobaleMT->xGlobalAlpha < 0.98f))
{
GLI_M_ChangeRenderingParrameter(KM_LISTTYPE , ListType ,KM_TRANS_POLYGON);
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_SRCALPHA);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_INVSRCALPHA);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , TRUE);
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_ONE);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_ONE);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , FALSE);
} else {
GLI_M_ChangeRenderingParrameter(KM_LISTTYPE , ListType ,KM_OPAQUE_POLYGON);
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_ONE);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_ZERO);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , FALSE);
}
stRenderingContex . pTextureSurfaceDesc = &stSpecialTexture;
}
else
{
if ((p_stGlobaleMT -> p_stCurrentTexture != NULL) && (p_stGlobaleMT -> p_stCurrentTexture -> bIsAvailable))
{
GLI_M_ChangeRenderingParrameter(KM_FILTERMODE , FilterMode , KM_BILINEAR);
GLI_M_ChangeRenderingParrameter(KM_SHADINGMODE , ShadingMode ,KM_TEXTUREGOURAUD);
if ((p_stGlobaleMT -> p_stCurrentTexture -> lTextureCaps & (GLI_C_lAlphaTexture | GLI_C_lNZTexture | GLI_C_lAddTransparencyTexture) )
|| ((!(p_stGlobaleMT -> lCurrentDrawMask & GLI_C_lIsNotGrided)) && (p_stGlobaleMT->xGlobalAlpha < 0.98f)))
{
GLI_M_ChangeRenderingParrameter(KM_LISTTYPE , ListType ,KM_TRANS_POLYGON);
if (p_stGlobaleMT -> p_stCurrentTexture -> lTextureCaps & GLI_C_lAddTransparencyTexture)
{
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_ONE);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_ONE);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , FALSE);
} else {
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_SRCALPHA);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_INVSRCALPHA);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , TRUE);
}
} else
{
GLI_M_ChangeRenderingParrameter(KM_LISTTYPE , ListType ,KM_OPAQUE_POLYGON);
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_ONE);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_ZERO);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , FALSE);
}
switch (p_stGlobaleMT -> p_stCurrentTexture -> ucCylingMode)
{
case 0:
GLI_M_ChangeRenderingParrameter(KM_CLAMPUV , ClampUV ,KM_CLAMP_UV);
break;
case GLI_C_lCylingUV:
GLI_M_ChangeRenderingParrameter(KM_CLAMPUV , ClampUV ,KM_NOCLAMP);
break;
case GLI_C_lCylingU:
GLI_M_ChangeRenderingParrameter(KM_CLAMPUV , ClampUV ,KM_CLAMP_U);
break;
case GLI_C_lCylingV:
GLI_M_ChangeRenderingParrameter(KM_CLAMPUV , ClampUV ,KM_CLAMP_V);
break;
}
/* STRIPS BUG*/
/* GLI_M_ChangeRenderingParrameter(KM_CLAMPUV , ClampUV ,KM_NOCLAMP);*/
stRenderingContex . pTextureSurfaceDesc = p_stGlobaleMT -> p_stCurrentTexture -> p_stSpecParam;
} else
{
GLI_M_ChangeRenderingParrameter(KM_SHADINGMODE , ShadingMode ,KM_NOTEXTUREGOURAUD);
GLI_M_ChangeRenderingParrameter(KM_LISTTYPE , ListType ,KM_TRANS_POLYGON);
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_SRCALPHA);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_INVSRCALPHA);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , TRUE);
p_stGlobaleMT-> p_stCurrentTexture = NULL;
}
}
kmProcessVertexRenderState(&stRenderingContex);
kmSetVertexRenderState(&stRenderingContex);
kmStartVertexStrip/*Direct*/(&VertexBufferDesc);
}
extern GLI_tdstInternalGlobalValuesFor3dEngine *GLI_BIG_GLOBALS;
extern KMVERTEXBUFFDESC VertexBufferDesc;
void GLI_vWaitEndOfRendering();
void GLI_vWaitEndOfVertexTransfert();
void GLI_vWaitEndOfVSync();
void GLI_DRV_vWrite16bBitmapToBackBuffer( void *_p_vSourceBuffer, long _lWidth, long _lHeight, long _lDestLeft, long _lDestTop, long _lDestRight, long _lDestBottom )
{
KMVERTEX_03 gld_CurrentDestXYZ[4];
GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT;
static bFirst = 0;
p_stGlobaleMT = GLI_BIG_GLOBALS;
if (!bFirst)
{
GLI_BigInitKamuiRendering(p_stGlobaleMT);
}
bFirst++;
if ((bFirst & 0x1F) ) /* == QUADRUPLE SPEED!!*/
{
/* GLI_vWaitEndOfVSync();
GLI_vWaitEndOfRendering();*/
GLD_MDRV_vBlitStretched16b( 512,512,VignetteBuffer ,512,_lWidth,_lHeight,_p_vSourceBuffer);
kmLoadTexture(&stSpecialTexture,(void *)VignetteBuffer,FALSE,FALSE);
}/* */
/* GLI_vWaitEndOfVSync();*/
/* return;*/
/* ------------------------ BEURK ---------------------------------*/
stRenderingContex . RenderState = 0;
GLI_M_ChangeRenderingParrameter(KM_SHADINGMODE , ShadingMode ,KM_TEXTUREGOURAUD);
GLI_M_ChangeRenderingParrameter(KM_LISTTYPE , ListType ,KM_OPAQUE_POLYGON);
GLI_M_ChangeRenderingParrameter(KM_SRCBLENDINGMODE , SRCBlendingMode ,KM_ONE);
GLI_M_ChangeRenderingParrameter(KM_DSTBLENDINGMODE , DSTBlendingMode ,KM_ZERO);
GLI_M_ChangeRenderingParrameter(KM_USEALPHA , bUseAlpha , FALSE);
GLI_M_ChangeRenderingParrameter(KM_CLAMPUV , ClampUV ,KM_CLAMP_UV);
GLI_M_ChangeRenderingParrameter(KM_CLAMPUV , ClampUV ,KM_CLAMP_UV);
GLI_M_ChangeRenderingParrameter(KM_FILTERMODE , FilterMode , KM_POINT_SAMPLE);
GLI_M_ChangeRenderingParrameter(KM_FOGMODE , FogMode , KM_NOFOG);
stRenderingContex . pTextureSurfaceDesc = &stSpecialTexture;/* */
kmProcessVertexRenderState(&stRenderingContex);
kmSetVertexRenderState(&stRenderingContex);
kmStartVertexStrip/*Direct*/(&VertexBufferDesc);
/* ------------------------ End BEURK ------------------------------*/
gld_CurrentDestXYZ[0] . fX = 0.0f;
gld_CurrentDestXYZ[0] . fY = 0.0f;
gld_CurrentDestXYZ[1] . fX = 0.0f;
gld_CurrentDestXYZ[1] . fY = 480.0f;
gld_CurrentDestXYZ[2] . fX = 640.0f;
gld_CurrentDestXYZ[2] . fY = 480.0f;
gld_CurrentDestXYZ[3] . fX = 640.0f;
gld_CurrentDestXYZ[3] . fY = 0.0f;
gld_CurrentDestXYZ[0] . fU = 0.0f;
gld_CurrentDestXYZ[0] . fV = 0.0f;
gld_CurrentDestXYZ[1] . fU = 0.0f;
gld_CurrentDestXYZ[1] . fV = 1.0f;
gld_CurrentDestXYZ[2] . fU = 1.0f;
gld_CurrentDestXYZ[2] . fV = 1.0f;
gld_CurrentDestXYZ[3] . fU = 1.0f;
gld_CurrentDestXYZ[3] . fV = 0.0f;
*(unsigned long *)&gld_CurrentDestXYZ[0].uBaseRGB =
*(unsigned long *)&gld_CurrentDestXYZ[1].uBaseRGB =
*(unsigned long *)&gld_CurrentDestXYZ[2].uBaseRGB =
*(unsigned long *)&gld_CurrentDestXYZ[3].uBaseRGB = 0xffffffff;
gld_CurrentDestXYZ[0] . fZ =
gld_CurrentDestXYZ[1] . fZ =
gld_CurrentDestXYZ[2] . fZ =
gld_CurrentDestXYZ[3] . fZ =1.0f;
gld_CurrentDestXYZ[0].ParamControlWord =
gld_CurrentDestXYZ[1].ParamControlWord =
gld_CurrentDestXYZ[3].ParamControlWord =
KM_VERTEXPARAM_NORMAL;
gld_CurrentDestXYZ[2].ParamControlWord = KM_VERTEXPARAM_ENDOFSTRIP;
kmSetVertex(&VertexBufferDesc,&gld_CurrentDestXYZ[0],KM_VERTEXTYPE_03,sizeof(gld_CurrentDestXYZ[1]));
kmSetVertex(&VertexBufferDesc,&gld_CurrentDestXYZ[1],KM_VERTEXTYPE_03,sizeof(gld_CurrentDestXYZ[1]));
kmSetVertex(&VertexBufferDesc,&gld_CurrentDestXYZ[3],KM_VERTEXTYPE_03,sizeof(gld_CurrentDestXYZ[1]));
kmSetVertex(&VertexBufferDesc,&gld_CurrentDestXYZ[2],KM_VERTEXTYPE_03,sizeof(gld_CurrentDestXYZ[1]));
}
float GLI_km_IndexTableToOoZ(long index)
{
return (float)( pow ( 2.0f , (index >> 4)) * (float)((index & 0x0f) + 16) / 16.0f);
}
void GLI_INTERFACE_FUNC(GLI_vSetFogParams) ( tdstFogParams *_p_stFogParams )
{
long i;
float km_FogTable[256], RealZ , fCoef;
float fStart, fEnd ;
KMPACKEDARGB kmColor;
GLI_tdxValue xBlendStart, xBlendEnd;
kmSetFogDensity(0xFF08);
/* xZDepthEndSave = _p_stFogParams->xDepthEnd;*/
xDepthStartSave = _p_stFogParams->xDepthStart;
xBlendStart = _p_stFogParams->xBlendStart / 255.0f;
xBlendEnd = _p_stFogParams->xBlendEnd / 255.0f;
fStart = _p_stFogParams->xDepthStart;
fEnd = _p_stFogParams->xDepthEnd;
fCoef = 1.0f / ( fEnd - fStart );
for (i = 0 ; i < 256 ; i++)
{
RealZ = GLI_km_IndexTableToOoZ(i) / 512.0f;
RealZ = GLI_C_xZClippingNear / RealZ;
/* realZ == Now Real Depth, not 1/W !!!*/
/* les salaud!!!*/
if (RealZ < fStart)
km_FogTable[i] = xBlendStart;
else
{
if (RealZ > fEnd)
km_FogTable[i] = xBlendEnd;
else
{
km_FogTable[i] = ( RealZ - fStart ) * fCoef;
km_FogTable[i] *= xBlendEnd - xBlendStart;
km_FogTable[i] += xBlendStart;
}
}
}
kmSetFogTable((PKMFLOAT)km_FogTable);
*(long *)&kmColor = RGB_MAKE((long)( _p_stFogParams->stColor.xR * 255.f),(long)(_p_stFogParams->stColor.xG * 255.f),(long)(_p_stFogParams->stColor.xB * 255.f));
kmSetFogTableColor(kmColor);
}
/*EVL*/
#ifdef __cplusplus
} /*extern "C"*/
#endif

View File

@@ -0,0 +1,306 @@
/*
Tested with LINT
*/
/**************
TEXTURE.C
Ver 1.0
***************/
#include "GLD.h"
#include "GEO.h"
#include "TEX.h"
#include "gli_st.h"
#include "textu_st.h"
#include "texture.h"
#include <string.h>
#ifdef KAMUI
#include <kamui.h>
#endif
#include "GLI_interface.h"
unsigned long ulTotalUsedMemory;
unsigned long ulAgpUsedMemory;
extern unsigned long GLI_gsCurrentMemoryChannel;
extern unsigned long gs_lRGBBitCount;
extern long gs_lTreeOfNamesNumberOfLastLetter;
extern long gs_lNumberOfTextureToCreate;
extern long gs_lLastIdxInDEFTableOfTextures;
extern long lNbTextureFormat;
extern long lCurrentTextureFormat;
/*extern long gs_aDEFTableOfTextureMemoryChannels[ C_lMaxNumberOfTexture ];*/
extern unsigned char *gs_aCurrentTextures;
/*extern GLI_tdstTexture *gs_aDEFTableOfTextureAlreadyRead [ C_lMaxNumberOfTexture ];*/
extern unsigned char g_ucGliModuleId;
/*extern void *GLI_gs_p_ConvertBufferMipMapping;*/
short TEXTURETWIDDLED[1024L*1024L];
static unsigned long GLI_a256FastTwiddledTable[256];
/*unsigned long GLI_a256FastTwiddledTableD4[256];*/
long GLI_fnLinear2CasseTete(unsigned long lLinear , long lPitch)
{
unsigned long lreturnvalue = 0;
unsigned long CMPX = 1;
while (lLinear != 0)
{
if (lLinear & 128) lreturnvalue += CMPX<<3;
if (lLinear & 64) lreturnvalue += lPitch<<3;
if (lLinear & 32) lreturnvalue += CMPX<<2;
if (lLinear & 16) lreturnvalue += lPitch<<2;
if (lLinear & 8) lreturnvalue += CMPX<<1;
if (lLinear & 4) lreturnvalue += lPitch<<1;
if (lLinear & 2) lreturnvalue += CMPX;
if (lLinear & 1) lreturnvalue += lPitch;
CMPX<<=4;
lPitch<<=4;
lLinear >>= 8;
}
return lreturnvalue;
}
void GLI_InitTwiddlingTable(long largeur)
{
long i;
for (i = 0 ; i < 256 ; i++ )
GLI_a256FastTwiddledTable[i] = GLI_fnLinear2CasseTete(i, largeur);
}
void GLI_fnSwitchTwiddled(short *p_Texture , long size )
{
unsigned long xcounter, SizeXSize , SizeXSizeD8;
short *Pdest ;
unsigned long *GLI_a256FastTwiddledTableLocal;
static long largeur = 0;
short *p_TextureLocal,*p_DestLast;
Pdest = TEXTURETWIDDLED;
if (size != largeur)
{
GLI_InitTwiddlingTable(size);
largeur = size;
}
SizeXSize = size * size;
if (!(SizeXSize & 0xFF))
{
SizeXSizeD8 = SizeXSize >> 8;
for (xcounter = 0 ; xcounter < SizeXSizeD8 ; xcounter ++ )
{
p_TextureLocal = p_Texture + (GLI_a256FastTwiddledTable[xcounter & 0xFF]<<4);
p_TextureLocal += GLI_a256FastTwiddledTable[(xcounter>>8) & 0xFF]<<8;
p_DestLast = Pdest + 256;
GLI_a256FastTwiddledTableLocal = GLI_a256FastTwiddledTable;
while (Pdest < p_DestLast)
*(Pdest++)= *(p_TextureLocal + *(GLI_a256FastTwiddledTableLocal++));
}
}
else
{
xcounter = SizeXSize ;
for ( xcounter = 0 ; xcounter < SizeXSize ; xcounter++ )
*(Pdest++)= *(p_Texture +
GLI_a256FastTwiddledTable[xcounter & 0xFF] +
(GLI_a256FastTwiddledTable[(xcounter>>8) & 0xFF]<<4) +
(GLI_a256FastTwiddledTable[(xcounter>>16) & 0xFF]<<8));
}
memcpy( p_Texture, TEXTURETWIDDLED , SizeXSize<<1);
}
/*void GLI_xLoadTextureInTexelField(GLI_tdstTexture *p_stTexture, long *p_lTexelField);*/
/*void GLI_vDivideBitmapSurfaceBy2NonZero (unsigned long *p_Source,unsigned long *p_Dest,long lWidthSurfSouce, long lLenghtSurfSouce);*/
/*void GLI_vDivideBitmapSurfaceBy2 (unsigned long *p_Source,unsigned long *p_Dest,long lWidthSurfSouce, long lLenghtSurfSouce);*/
/*long GLI_lComputeTexturesSize();*/
#ifdef KAMUI
unsigned long GLI_lCorrectOffset(unsigned long lHeight)
{
long lReturnValue, LHeightLoc;
lReturnValue = 0;
LHeightLoc = lHeight;
while (LHeightLoc)
{
LHeightLoc>>=1;
lReturnValue += LHeightLoc * LHeightLoc;
}
return (lReturnValue + 1);
}
void GLI_KamuiComputeMipMapping(void *p_SRC ,unsigned long Size ,KMTEXTURETYPE mode)
{
unsigned short *p_Local,*p_Local1;
unsigned long *p_Local2;
unsigned long *p_MEMCPY1 , *p_MEMCPY2 ,LocalSize;
unsigned long SizeXSize, SizeXSizeLocal , ulLocalColor;
p_Local = (unsigned short *)p_SRC;
SizeXSize = Size * Size;
p_Local1 = p_Local + GLI_lCorrectOffset(Size);
p_MEMCPY1 = (unsigned long *)p_Local1;
p_MEMCPY2 = (unsigned long *)p_Local;
LocalSize = SizeXSize>>1;
p_MEMCPY1 += LocalSize;
p_MEMCPY2 += LocalSize;
while (LocalSize--)
{
*(--p_MEMCPY1) = *(--p_MEMCPY2);
}
/* return;// */
/* memcpy( p_Local1 , p_Local , SizeXSize<<1);*/
Size >>= 1;
while (Size)
{
SizeXSize >>= 2;
SizeXSizeLocal = SizeXSize;
p_Local1 = p_Local + GLI_lCorrectOffset(Size);
(unsigned short *)p_Local2 = p_Local1 + SizeXSize;
switch (mode)
{
case KM_TEXTURE_RGB565:
while (SizeXSizeLocal--)
{
ulLocalColor = ((*(p_Local2) & 0x0000001f) << 1) + ((*(p_Local2) & 0x000007e0) << 3) + ((*(p_Local2) & 0x0000f800) << 6) + ((*(p_Local2) & 0x001f0000) >> 15) + ((*(p_Local2) & 0x07e00000) >> 13) + ((*(p_Local2) & 0xf8000000) >> 10);
p_Local2++;
ulLocalColor += ((*(p_Local2) & 0x0000001f) << 1) + ((*(p_Local2) & 0x000007e0) << 3) + ((*(p_Local2) & 0x0000f800) << 6) + ((*(p_Local2) & 0x001f0000) >> 15) + ((*(p_Local2) & 0x07e00000) >> 13) + ((*(p_Local2) & 0xf8000000) >> 10);
ulLocalColor <<= 8;
ulLocalColor = (ulLocalColor & 0xf8000000) | ((ulLocalColor & 0x00f80000)<<3) | ((ulLocalColor & 0x0000f800)<<5);
*(p_Local1++) = (unsigned short)(ulLocalColor>>16);
p_Local2++;
}
break;
case KM_TEXTURE_ARGB4444:
while (SizeXSizeLocal--)
{
ulLocalColor = ((*(p_Local2) & 0x0000000F) << 2 ) + ((*(p_Local2) & 0x000000F0) << 6 ) + ((*(p_Local2) & 0x00000F00) << 10) + ((*(p_Local2) & 0x0000f000) << 14) + ((*(p_Local2) & 0x000F0000) >> 14) + ((*(p_Local2) & 0x00F00000) >> 10) + ((*(p_Local2) & 0x0F000000) >> 6 ) + ((*(p_Local2) & 0xf0000000) >> 2 );
p_Local2++;
ulLocalColor += ((*(p_Local2) & 0x0000000F) << 2 ) + ((*(p_Local2) & 0x000000F0) << 6 ) + ((*(p_Local2) & 0x00000F00) << 10) + ((*(p_Local2) & 0x0000f000) << 14) + ((*(p_Local2) & 0x000F0000) >> 14) + ((*(p_Local2) & 0x00F00000) >> 10) + ((*(p_Local2) & 0x0F000000) >> 6 ) + ((*(p_Local2) & 0xf0000000) >> 2 );
ulLocalColor = (ulLocalColor & 0xf0000000) | ((ulLocalColor & 0x00f00000)<<4) | ((ulLocalColor & 0x0000f000)<<8) | ((ulLocalColor & 0x000000f0)<<12);
*(p_Local1++) = (unsigned short)(ulLocalColor>>16);
p_Local2++;
}
break;
case KM_TEXTURE_ARGB1555:
while (SizeXSizeLocal--)
{
ulLocalColor = ((*(p_Local2) & 0x0000001F) << 1 ) + ((*(p_Local2) & 0x000003E0) << 4 ) + ((*(p_Local2) & 0x00007C00) << 7 ) + ((*(p_Local2) & 0x00008000) << 14) + ((*(p_Local2) & 0x001F0000) >> 15) + ((*(p_Local2) & 0x03E00000) >> 12) + ((*(p_Local2) & 0x7C000000) >> 9 ) + ((*(p_Local2) & 0x80000000) >> 2 ) ;
p_Local2++;
ulLocalColor += ((*(p_Local2) & 0x0000001F) << 1 ) + ((*(p_Local2) & 0x000003E0) << 4 ) + ((*(p_Local2) & 0x00007C00) << 7 ) + ((*(p_Local2) & 0x00008000) << 14) + ((*(p_Local2) & 0x001F0000) >> 15) + ((*(p_Local2) & 0x03E00000) >> 12) + ((*(p_Local2) & 0x7C000000) >> 9 ) + ((*(p_Local2) & 0x80000000) >> 2 ) ;
ulLocalColor = (ulLocalColor & 0x80000000) | ((ulLocalColor & 0x00f80000)<<7) | ((ulLocalColor & 0x0000f800)<<10) | ((ulLocalColor & 0x000000f8)<<13);
*(p_Local1++) = (unsigned short)(ulLocalColor>>16);
p_Local2++;
}
break;
}
Size >>= 1;
}
}
void GLI_DRV_vDownLoadTextures(long bRestore, long _lTextureMode, BOOL bReloading )
{
long lTextureCounter;
KMTEXTURETYPE nTextureType;
GLI_tdstTexture *p_stTexture;
for (lTextureCounter = 0; lTextureCounter < GLI_C_lNBMaxOfTextures ; lTextureCounter ++)
if (gs_aDEFTableOfTextureMemoryChannels[lTextureCounter] != GLI_TEXIsUnallocated )
{
p_stTexture = gs_aDEFTableOfTextureAlreadyRead[lTextureCounter];
while (p_stTexture != NULL)
{
p_stTexture -> bIsAvailable = 0;
GLI_MDRV_xLoadTextureInTexelField(p_stTexture, GLI_gs_p_ConvertBufferMipMapping,TRUE);
if (p_stTexture -> lTextureCaps & GLI_C_lNZTexture)
{
GLI_MDRV_vCompressTex1555 ( p_stTexture , GLI_gs_p_ConvertBufferMipMapping);
nTextureType = KM_TEXTURE_ARGB1555;
} else
{
if ((p_stTexture -> lTextureCaps & GLI_C_lAlphaTexture) == 0)
{
GLI_MDRV_vCompressTex565 ( p_stTexture , GLI_gs_p_ConvertBufferMipMapping);
nTextureType = KM_TEXTURE_RGB565;
} else
{
GLI_MDRV_vCompressTex4444 ( p_stTexture , GLI_gs_p_ConvertBufferMipMapping);
nTextureType = KM_TEXTURE_ARGB4444;
}
}
p_stTexture-> p_stSpecParam = malloc(sizeof(KMSURFACEDESC));
GLI_fnSwitchTwiddled(GLI_gs_p_ConvertBufferMipMapping , p_stTexture->lHeight );
if (p_stTexture ->lNumberOfLod)
{
GLI_KamuiComputeMipMapping(GLI_gs_p_ConvertBufferMipMapping ,p_stTexture->lHeight , nTextureType);
nTextureType |= KM_TEXTURE_TWIDDLED_MM;
} else
nTextureType |= KM_TEXTURE_TWIDDLED;
if (kmCreateTextureSurface((KMSURFACEDESC * )p_stTexture-> p_stSpecParam,p_stTexture->lHeight,p_stTexture->lWidth,nTextureType) == KMSTATUS_SUCCESS)
{
kmLoadTexture((KMSURFACEDESC * )p_stTexture-> p_stSpecParam,GLI_gs_p_ConvertBufferMipMapping,FALSE,FALSE);
p_stTexture->bIsAvailable = 1;
}
p_stTexture = p_stTexture -> p_NextLodOfTexture;
p_stTexture = NULL;
}
}
}
#endif
/*
----------------------------------------------------------------------------------------
Description : get total memory size available for texture
----------------------------------------------------------------------------------------
*/
long GLI_DRV_lGetHardwareTotalTextureMemorySize(long _lTextureMode)
{
return (6388608L);
}
/**********************************************************************************************/
/* Name: GLI_DRV_lGetHardwareMaxTextureSize() 1.0*/
/* OPTIMMIZED : No*/
/**********************************************************************************************/
long GLI_DRV_lGetHardwareMaxTextureSize(void)
{
return (1024);
}
/**********************************************************************************************/
/* Name: GLI_DRV_lIsHardwareAcceptNonSquaredTextures() 1.0*/
/* OPTIMMIZED : No*/
/**********************************************************************************************/
long GLI_DRV_lIsHardwareAcceptNonSquaredTextures(void)
{
return (0);
}
void GLI_DRV_vUnLoadTextures()
{
long lTextureCounter;
GLI_tdstTexture *p_stTexture;
for ( lTextureCounter = 0 ; lTextureCounter < C_lMaxNumberOfTexture ;lTextureCounter ++)
{
if (gs_aDEFTableOfTextureMemoryChannels[lTextureCounter] != GLI_TEXIsUnallocated )
{
p_stTexture = gs_aDEFTableOfTextureAlreadyRead[lTextureCounter];
if (p_stTexture != NULL)
{
if (p_stTexture->bIsAvailable)
{
kmFreeTexture((KMSURFACEDESC * )p_stTexture-> p_stSpecParam);
free (p_stTexture-> p_stSpecParam);
p_stTexture->bIsAvailable = 0;
}
}
}
}
}
#ifdef __cplusplus
} /* extern "C" */
#endif

View File

@@ -0,0 +1,164 @@
/*
Tested with LINT
*/
#include <KAMUI.H>
#include "init_gli.h"
#include "gli_st.h"
#include "GLI_Defn.h"
#include "light_st.h"
#include "PvObj_st.h"
#include "GLI_interface.h"
KMVERTEXBUFFDESC VertexBufferDesc;
KMSURFACEDESC PrimarySurfaceDesc; /* Primary frame buffer*/
KMSURFACEDESC BackSurfaceDesc; /* Back-buffer frame buffer*/
KMSURFACEDESC stSpecialTexture;
KMSURFACEDESC stSpecialTexture20;
KMSURFACEDESC stSpecialTexture21;
KMVERTEXCONTEXT stRenderingContex;
extern short TEXTURETWIDDLED[];
extern volatile long gsbIsRender;
#define GLI_C_SiSeOFVertexBuffer (512288)
extern GLI_tdstInternalGlobalValuesFor3dEngine *GLI_BIG_GLOBALS;
#ifdef __cplusplus
extern "C"
{
#endif
void GLI_vEndOfRenderingCallback(void *pnull)
{
gsbIsRender &= 0xFFFFFFFF - 1;
}
void GLI_vEndOfVertexTransfertCallback(void *pnull)
{
gsbIsRender &= 0xFFFFFFFF - 2;
}
void GLI_vWaitEndOfVertexTransfert()
{
while (gsbIsRender & 2) {};
}
void GLI_vWaitEndOfRendering()
{
while (gsbIsRender & 1) {};
}
void GLI_vEndOfVSyncCallback(void *pnull)
{
gsbIsRender &= ~4;
}
void GLI_vWaitEndOfVSync()
{
gsbIsRender |= 4;
while (gsbIsRender & 4) {};
}
/* Global initialisation.*/
void GLI_DRV_xInitDriver( HWND _hWnd, BOOL _bFullScreen, long _lWidth, long _lHeight, long _lBpp )
{
kmInitDevice(KM_VGA);
kmSetDisplayMode( KM_DSPMODE_VGA,KM_DSPBPP_RGB565,FALSE,TRUE);
kmCreateFrameBufferSurface(&PrimarySurfaceDesc,640,480,FALSE,FALSE);
kmCreateFrameBufferSurface(&BackSurfaceDesc,640,480,FALSE,FALSE);
kmCreateVertexBuffer(&VertexBufferDesc, GLI_C_SiSeOFVertexBuffer , 0 , GLI_C_SiSeOFVertexBuffer , 0);
kmActivateFrameBuffer( &PrimarySurfaceDesc,&BackSurfaceDesc,FALSE,TRUE);
kmSetStrideWidth(512);
kmCreateTextureSurface(&stSpecialTexture,512,512, KM_TEXTURE_STRIDE | KM_TEXTURE_RGB565);
#define WATERSIZE 256L
kmCreateTextureSurface(&stSpecialTexture20,WATERSIZE ,WATERSIZE, KM_TEXTURE_TWIDDLED | KM_TEXTURE_ARGB4444);
kmSetEORCallback(GLI_vEndOfRenderingCallback,NULL);
kmSetEndOfVertexCallback(GLI_vEndOfVertexTransfertCallback,NULL);
kmSetVSyncCallback(GLI_vEndOfVSyncCallback,NULL);
memset( &stRenderingContex, 0, sizeof(stRenderingContex));
}
/* Temporary function.*/
/*
long GLI_INTERFACE_FUNC(GLI_DRV_lWhatIsGli)(void)
{
return GLI_C_VersionGlide;
}
*/
void GLI_DRV_vCloseDriver ()
{
}
/* Return version number.*/
/*
long GLI_INTERFACE_FUNC(GLI_lGetNumOfVersion)(void)
{
return 0;//g_stCurLLInterface.iMode;
}
*/
/* Return a pointer on the text version of GLI engine.*/
/*unsigned char *GLI_INTERFACE_FUNC(GLI_ucGetTextOfVersion)(void)
{
return NULL;//g_stCurLLInterface.ucTextMode;
}
*/
/* Erase a rectangular region of Z buffer.*/
void GLI_INTERFACE_FUNC(GLI_DRV_vClearZBufferRegion)(long lXStart,long lXEnd,long lYStart,long lYEnd)
{
/* g_stCurLLInterface.p_fnClearZBufferRegion(lXStart,lXEnd,lYStart,lYEnd);*/
if (!bDrawMirrorSymetric)
GLI_BIG_GLOBALS->lDisplayMenuIsDetected = 1;
}
void GLI_INTERFACE_FUNC(GLI_vBeginDrawingTexturedMirrors)(void)
{
GLI_BIG_GLOBALS->bDrawMirrorSymetric = 1;
}
void GLI_INTERFACE_FUNC(GLI_vBeginDrawingTexturedMirrorsSurfaces)()
{
/*kmSetFramebufferTexture(&TexSurfaceDesc2);*/
GLI_BIG_GLOBALS->lAMirrorIsDetected = 3;
/* GLI_vWaitEndOfRendering();*/
/* GLI_vWaitEndOfVSync();*/
/* kmRenderTexture(&stSpecialTexture);*/
/* GLI_vWaitEndOfRendering();*/
/* GLI_vWaitEndOfVSync();*/
/* kmFlipFrameBuffer();// */
/* GLI_vWaitEndOfRendering();*/
/* Now Draw The reversed World . It will be displayed with Frame later.*/
/* GLI_vWaitEndOfRendering();*/
}
void
GLI_INTERFACE_FUNC(GLI_vEndDrawingTexturedMirrors)()
{
GLI_BIG_GLOBALS->lAMirrorIsDetected &= 1;
GLI_BIG_GLOBALS->bDrawMirrorSymetric = 0;
}
/*extern long GLI_xIsGliInit();*/
void GLI_INTERFACE_FUNC(GLI_DRV_vFlipDevice)(long lNbFrames)
{
if (!GLI_MDRV_xIsGliInit())
return;
GLI_BIG_GLOBALS->lDisplayMenuIsDetected = 0;
GLI_BIG_GLOBALS->lAMirrorIsDetected = 0;
gsbIsRender |= 3;
kmFlipFrameBuffer();/* */
kmRender/*Direct*/();
}
void GLI_INTERFACE_FUNC(GLI_DRV_vClearDevice)(BOOL ZBuffer, BOOL ColorBuffer, unsigned long Color)
{
}
#ifdef __cplusplus
} /*extern "C"*/
#endif