Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#define WFO_FAILURE FALSE
#define WFO_SUCCESS TRUE
#define PI 3.141592653589793
#define TWO_PI 2.0*PI
#define ZERO_EPS 0.00000001
//#define VARRAY 1
static const double CoplanarThresholdAngle = PI/180.0/2.0; // 0.5 degreees
// outline prim types
#define PRIM_LINE 3
#define PRIM_CURVE 4
typedef struct { FLOAT x,y; } POINT2D;
typedef struct { FLOAT x,y,z; } POINT3D;
typedef struct { DWORD primType; DWORD nVerts; DWORD VertIndex;// index into Loop's VertBuf
POINT2D *pVert; // ptr to vertex list in Loop's VertBuf
POINT3D *pFNorm; // face normals
POINT3D *pVNorm; // vertex normals
} PRIM;
typedef struct { PRIM *PrimBuf; // array of prims
DWORD nPrims; DWORD PrimBufSize; POINT2D *VertBuf; // buffer of vertices for the loop
DWORD nVerts; DWORD VertBufSize; POINT3D *FNormBuf; // buffer of face normals
POINT3D *VNormBuf; // buffer of vertex normals
} LOOP;
typedef struct { LOOP *LoopBuf; // array of loops
DWORD nLoops; DWORD LoopBufSize; } LOOP_LIST;
typedef struct { FLOAT zExtrusion; INT extrType; FLOAT* FaceBuf; DWORD FaceBufSize; DWORD FaceBufIndex; DWORD FaceVertexCountIndex; #ifdef VARRAY
FLOAT* vaBuf; DWORD vaBufSize; #endif
#ifdef FONT_DEBUG
BOOL bSidePolys; BOOL bFacePolys; #endif
GLenum TessErrorOccurred; } EXTRContext;
// Memory pool for tesselation Combine callback
#define POOL_SIZE 50
typedef struct MEM_POOL MEM_POOL;
struct MEM_POOL { int index; // next free space in pool
POINT2D pool[POOL_SIZE]; // memory pool
MEM_POOL *next; // next pool
};
typedef struct { GLenum TessErrorOccurred; FLOAT chordalDeviation; FLOAT scale; int format; UCHAR* glyphBuf; DWORD glyphSize; HFONT hfontOld; GLUtesselator* tess; MEM_POOL combinePool; // start of MEM_POOL chain
MEM_POOL *curCombinePool; // currently active MEM_POOL
EXTRContext *ec; } OFContext; // Outline Font Context
extern EXTRContext* extr_Init( FLOAT extrusion, INT format );
extern void extr_Finish( EXTRContext *ec );
extern void extr_DrawLines( EXTRContext *ec, LOOP_LIST *pLoopList );
extern BOOL extr_DrawPolygons( EXTRContext *ec, LOOP_LIST *pLoopList );
#ifdef VARRAY
extern void DrawFacePolygons( EXTRContext *ec, FLOAT z ); #endif
extern BOOL extr_PolyInit( EXTRContext *ec );
extern void extr_PolyFinish( EXTRContext *ec );
extern void CALLBACK extr_glBegin( GLenum primType, void *data );
extern void CALLBACK extr_glVertex( GLfloat *v, void *data );
extern void CALLBACK extr_glEnd( void );
extern double CalcAngle( POINT2D *v1, POINT2D *v2 );
|