166 lines
5.3 KiB
C
166 lines
5.3 KiB
C
/*
|
|
Tested with LINT
|
|
*/
|
|
|
|
#include "Gli_st.h"
|
|
#include "GLI_Defn.h"
|
|
#include "light_st.h"
|
|
#include "PvObj_st.h"
|
|
#include "lines.h"
|
|
#include "proj.h"
|
|
#include "linear.h"
|
|
#include "matstack.h"
|
|
#include "vpt3D.h"
|
|
#include "camera.h"
|
|
#include "DLLInter.h"
|
|
#include "Object.h"
|
|
|
|
#include "acp_driver.h"
|
|
|
|
extern GLI_tdstInternalGlobalValuesFor3dEngine *GLI_BIG_GLOBALS;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/**********************************************************************************************/
|
|
/* Name: GLI_xDraw3DLine16 1.0*/
|
|
/* Goal: Draw 3d line unclipped and unprojected in 16b*/
|
|
/* Code: Philippe Vimont*/
|
|
/**********************************************************************************************/
|
|
/*void GLI_vSetZClip(float ZClip,GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT);*/
|
|
/*void GLI_NJA_vSendSingleLineToClip( GLD_tdstViewportAttributes *p_stVpt , GLI_tdstAligned3DVector *p_stVertex1 , GLI_tdstAligned2DVector *p_st2DVertex1 , GLI_tdstAligned3DVector *p_stVertex2 , GLI_tdstAligned2DVector *p_st2DVertex2 , GLI_tdstInternalGlobalValuesFor3dEngine *p_stGlobaleMT, long lDrawModeMask, GEO_tdstColor *p_stColor );*/
|
|
|
|
void GLI_xDraw3DLine16 ( GLD_tdstViewportAttributes *p_stVpt, MTH3D_tdstVector *p_stFirstPoint , MTH3D_tdstVector *p_stLastPoint , long lColor)
|
|
{
|
|
#ifdef _DEBUG
|
|
GLI_tdstAligned2DVector a2_st2DVertex[4];
|
|
GLI_tdstSpecificAttributesFor3D *p_st3DAtributes;
|
|
GLI_tdstAligned3DVector a2_stVertex[4];
|
|
GEO_tdstColor stColor;
|
|
|
|
p_st3DAtributes = (GLI_tdstSpecificAttributesFor3D*) (p_stVpt->p_vSpecificToXD);
|
|
|
|
|
|
GLI_DRV_vSetZClip( (float)p_st3DAtributes -> p_stCam -> xNear, GLI_BIG_GLOBALS);
|
|
|
|
|
|
/*turn points*/
|
|
GLI_xSerialLinearOp(1,p_stFirstPoint,&a2_stVertex[0],g_p_stCurrentMatrix);
|
|
GLI_xSerialLinearOp(1,p_stLastPoint,&a2_stVertex[1],g_p_stCurrentMatrix);
|
|
|
|
/* project points */
|
|
GLI_xSerialProjection(p_st3DAtributes->p_stCam,2,a2_stVertex,a2_st2DVertex);
|
|
#ifdef USE_DIRECTX
|
|
a2_st2DVertex[0].ulPackedColor = a2_st2DVertex[1].ulPackedColor = (0xFF000000 | lColor) ;
|
|
#else
|
|
a2_st2DVertex[0].ulPackedColor = a2_st2DVertex[1].ulPackedColor = lColor;
|
|
#endif
|
|
stColor.xR = (float)((lColor & 0x00FF0000)>>16) * 1.0f;
|
|
stColor.xG = (float)((lColor & 0x0000FF00)>>8) * 1.0f;
|
|
stColor.xB = (float)((lColor & 0x000000FF)>>0) * 1.0f;
|
|
|
|
GLI_BIG_GLOBALS->lCurrentDrawMask = 0xFFFFFFFF;
|
|
GLI_BIG_GLOBALS->lHierachDrawMask = 0xFFFFFFFF;
|
|
GLI_BIG_GLOBALS->hCurrentMaterial = NULL;
|
|
GLI_BIG_GLOBALS->gs_st_CurrentMatrix = g_p_stCurrentMatrix;
|
|
GLI_BIG_GLOBALS->gs_st_CameraMatrix = &p_st3DAtributes->p_stCam->stMatrix;
|
|
GLI_BIG_GLOBALS->p_stCurrentCamera = p_st3DAtributes->p_stCam;
|
|
GLI_DRV_vSetZClip( GLI_BIG_GLOBALS->p_stCurrentCamera->xNear, GLI_BIG_GLOBALS);
|
|
|
|
#ifdef TEST
|
|
{
|
|
static float x0=0;
|
|
static float y0=0;
|
|
static float z0=0.2;
|
|
|
|
static float x1=220;
|
|
static float y1=333;
|
|
static float z1=0.2;
|
|
|
|
a2_st2DVertex[0].xX = x0;
|
|
a2_st2DVertex[0].xY = y0;
|
|
//a2_stVertex[0].xZ = z0;
|
|
a2_st2DVertex[0].xOoZ = z0;
|
|
|
|
a2_st2DVertex[1].xX = x1;
|
|
a2_st2DVertex[1].xY = y1;
|
|
//a2_stVertex[1].xZ = z1;
|
|
a2_st2DVertex[1].xOoZ = z1;
|
|
}
|
|
#endif
|
|
|
|
GLI_DRV_vSendSingleLineToClip
|
|
(
|
|
p_stVpt ,
|
|
&a2_stVertex[0],
|
|
&a2_st2DVertex[0],
|
|
&a2_stVertex[1],
|
|
&a2_st2DVertex[1],
|
|
GLI_BIG_GLOBALS,
|
|
C_lGouraudLineElement,& stColor
|
|
);
|
|
#endif
|
|
}
|
|
|
|
void GLI_fnv_Draw2DLine( GLD_tdstViewportAttributes *p_stVpt, MTH3D_tdstVector *p_stFirstPoint, MTH3D_tdstVector *p_stLastPoint, long lColor )
|
|
{
|
|
GEO_tdstColor stColor;
|
|
GLI_tdstAligned3DVector a2_stVertex[2];
|
|
GLI_tdstAligned2DVector a2_st2DVertex[2];
|
|
|
|
GLI_BIG_GLOBALS->hCurrentMaterial = NULL;
|
|
GLI_BIG_GLOBALS->lCurrentDrawMask = 0xFFFFFFFF;
|
|
GLI_BIG_GLOBALS->lHierachDrawMask = 0xFFFFFFFF;
|
|
GLI_vDoMaterialSelection( GLI_BIG_GLOBALS );
|
|
|
|
a2_st2DVertex[0].ulPackedColor = a2_st2DVertex[1].ulPackedColor = lColor;
|
|
|
|
stColor.xR = (float)((lColor & 0x00FF0000)>>16) * 1.0f;
|
|
stColor.xG = (float)((lColor & 0x0000FF00)>>8) * 1.0f;
|
|
stColor.xB = (float)((lColor & 0x000000FF)>>0) * 1.0f;
|
|
|
|
|
|
a2_st2DVertex[0].xX = p_stFirstPoint->xX * p_stVpt->dwWidth;
|
|
a2_st2DVertex[0].xY = p_stFirstPoint->xY * p_stVpt->dwHeight;
|
|
a2_stVertex[0].xZ = a2_st2DVertex[0].xOoZ = 1000000.0f;
|
|
a2_st2DVertex[1].xX = p_stLastPoint->xX * p_stVpt->dwWidth;
|
|
a2_st2DVertex[1].xY = p_stLastPoint->xY * p_stVpt->dwHeight;
|
|
a2_stVertex[1].xZ = a2_st2DVertex[1].xOoZ = 1000000.0f;
|
|
|
|
GLI_DRV_vSendSingleLineToClip
|
|
(
|
|
p_stVpt ,
|
|
&a2_stVertex[0],
|
|
&a2_st2DVertex[0],
|
|
&a2_stVertex[1],
|
|
&a2_st2DVertex[1],
|
|
GLI_BIG_GLOBALS,
|
|
C_lGouraudLineElement,
|
|
&stColor
|
|
);
|
|
}
|
|
|
|
void GLI_fnv_DrawRectangle( GLD_tdstViewportAttributes *p_stVpt, MTH3D_tdstVector *p_stFirstPoint, MTH3D_tdstVector *p_stLastPoint, long lColor )
|
|
{
|
|
MTH3D_tdstVector stIntermediate;
|
|
|
|
stIntermediate.xX = p_stFirstPoint->xX;
|
|
stIntermediate.xY = p_stLastPoint->xY;
|
|
|
|
GLI_fnv_Draw2DLine( p_stVpt, p_stFirstPoint, &stIntermediate, lColor );
|
|
GLI_fnv_Draw2DLine( p_stVpt, &stIntermediate, p_stLastPoint, lColor );
|
|
|
|
stIntermediate.xX = p_stLastPoint->xX;
|
|
stIntermediate.xY = p_stFirstPoint->xY;
|
|
|
|
GLI_fnv_Draw2DLine( p_stVpt, p_stFirstPoint, &stIntermediate, lColor );
|
|
GLI_fnv_Draw2DLine( p_stVpt, &stIntermediate, p_stLastPoint, lColor );
|
|
}
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|