📄 prim.h
字号:
/*****************************************************************************
Name : prim.h
Title : Primitive definitions
* Author(s) : Imagination Technologies
* Created : 2 March 2004
*
* Copyright : 2004 by Imagination Technologies Limited.
* All rights reserved. No part of this software, either
* material or conceptual may be copied or distributed,
* transmitted, transcribed, stored in a retrieval system
* or translated into any human or computer language in any
* form by any means, electronic, mechanical, manual or
* other-wise, or disclosed to third parties without the
* express written permission of Imagination Technologies
* Limited, Unit 8, HomePark Industrial Estate,
* King's Langley, Hertfordshire, WD4 8LZ, U.K.
*
* Description : Primitive structure def's and prototypes
*
* Platform : Windows CE
*
</module>
$Log: prim.h $
*****************************************************************************/
#if !defined(_PRIM_H_)
#define _PRIM_H_
/*
Primitive setup-fn fill-mode selector values
*/
typedef enum
{
PRIM_FILLMODE_POINT = 0,
PRIM_FILLMODE_WIREFRAME = 1,
PRIM_FILLMODE_SOLID = 2,
PRIM_FILLMODE_FORCEDWORD = 0x7FFFFFFF
} PRIM_FILLMODE, *PPRIM_FILLMODE;
/*
Primitive terminate choices
*/
typedef enum
{
PRIM_TERMINATE_NONE = 0,
PRIM_TERMINATE_STRIP = 1,
PRIM_TERMINATE_PRIM = 2,
PRIM_TERMINATE_FORCEDWORD = 0x7FFFFFFF
} PRIM_TERMINATE, *PPRIM_TERMINATE;
IMG_VOID DrawPrimitive ( LPD3DM_CONTEXT psContext,
D3DMPRIMITIVETYPE PrimType,
IMG_UINT32 ui32StartVertex,
IMG_UINT32 ui32PrimitiveCount);
IMG_VOID DrawIndexedPrimitive ( LPD3DM_CONTEXT psContext,
D3DMPRIMITIVETYPE PrimType,
IMG_UINT32 ui32MinIndex,
IMG_UINT32 ui32NumVertices,
IMG_UINT32 ui32StartIndexOffset,
IMG_UINT32 ui32PrimitiveCount,
IMG_UINT32 ui32BaseVertexIndex);
IMG_VOID ProcessVertices(LPD3DM_CONTEXT psContext,
LPD3DM_VBUFFER psDestBuffer,
IMG_UINT32 ui32SrcStartIdx,
IMG_UINT32 ui32DstStartIdx,
IMG_UINT32 ui32VertexCount,
IMG_UINT32 ui32Flags);
IMG_VOID TriangleList(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID LineList(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID LineStrip(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID TriangleStrip(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID TriangleFan(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID PointList(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID TriListLine(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID TriStripLine(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID TriFanLine(LPD3DM_CONTEXT psContext,
IMG_UINT32 *pui32Data,
IMG_UINT32 ui32FVFcode,
IMG_UINT32 ui32Stride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedTriangleList (LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedTriangleStrip(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedTriangleFan(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedPointList(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedLineList(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedLineStrip(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedTriListLine(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedTriStripLine(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
IMG_VOID IndexedTriFanLine(LPD3DM_CONTEXT psContext,
IMG_UINT32 ui32FVFcode,
BYTE *pbVBData,
IMG_UINT32 ui32VBByteStride,
BYTE *pbIBData,
IMG_UINT32 ui32IBByteStride,
IMG_UINT32 ui32PrimCount);
typedef IMG_VOID (*DP_INDEXED_PRIM) ( LPD3DM_CONTEXT,
IMG_UINT32,
BYTE *,
IMG_UINT32,
BYTE *,
IMG_UINT32,
IMG_UINT32);
typedef IMG_VOID (*DP_PRIM) ( LPD3DM_CONTEXT,
IMG_UINT32 *,
IMG_UINT32,
IMG_UINT32,
IMG_UINT32);
/**************************************************************************
Indexed Primitive Jump Tables
**************************************************************************/
static
DP_INDEXED_PRIM
apfnIndexedTriList[3] = {
IndexedPointList,/* prim * 3 */
IndexedTriListLine,
IndexedTriangleList
};
static
DP_INDEXED_PRIM
apfnIndexedTriStrip[3] ={
IndexedPointList,/* prim + 2 */
IndexedTriStripLine,
IndexedTriangleStrip
};
static
DP_INDEXED_PRIM
apfnIndexedTriFan[3] = {
IndexedPointList,/* prim + 2 */
IndexedTriFanLine,
IndexedTriangleFan
};
static
DP_INDEXED_PRIM
apfnIndexedPointList[3] ={
IndexedPointList,
IndexedPointList,
IndexedPointList
};
static
DP_INDEXED_PRIM
apfnIndexedLineList[3] ={
IndexedPointList,/* prim * 2 */
IndexedLineList,
IndexedLineList
};
static
DP_INDEXED_PRIM
apfnIndexedLineStrip[3] ={
IndexedPointList,/* prim + 1 */
IndexedLineStrip,
IndexedLineStrip
};
/**************************************************************************
Non-Indexed Primitive Jump Tables
**************************************************************************/
static
DP_PRIM
apfnTriList[3] = {
PointList,/* prim * 3 */
TriListLine,
TriangleList
};
static
DP_PRIM
apfnTriStrip[3] = {
PointList,/* prim + 2 */
TriStripLine,
TriangleStrip
};
static
DP_PRIM
apfnTriFan[3] = {
PointList,/* prim + 2 */
TriFanLine,
TriangleFan
};
static
DP_PRIM
apfnPointList[3] = {
PointList,
PointList,
PointList
};
static
DP_PRIM
apfnLineList[3] = {
LineList,
LineList,
LineList
};
static
DP_PRIM
apfnLineStrip[3] = {
LineStrip,
LineStrip,
LineStrip
};
/**************************************************************************/
typedef struct _TA_WRITE_DATA_
{
union
{
NTV_TYPE NtvData;
IMG_UINT32 ui32Data;
};
} TA_WRITE_DATA;
#define PVR_SWTNL_MAX_LIGHTS 8
/* SW TNL Vertex flags */
#define D3DM_HASFLAG_SHIFT 0
#define D3DM_HASFLAG_DIFFUSE_COLOR (0x0001 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_SPECULAR_COLOR (0x0002 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_TEXTURE0 (0x0004 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_TEXTURE1 (0x0008 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_NORMAL (0x0010 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_EYE (0x0020 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_CLIP (0x0040 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_FOG (0x0080 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_RHW (0x1000 << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_MASK (0x00ff << D3DM_HASFLAG_SHIFT)
#define D3DM_HASFLAG_LIGHTING (D3DM_HASFLAG_EYE | D3DM_HASFLAG_NORMAL)
/* Bits for clip codes (view frustum and user defined)
*/
#define D3DM_CLIPFLAG_SHIFT 8
#define D3DM_CLIPFLAG_NEAR (0x0001 << D3DM_CLIPFLAG_SHIFT)
#define D3DM_CLIPFLAG_FAR (0x0002 << D3DM_CLIPFLAG_SHIFT)
#define D3DM_CLIPFLAG_USER0 (0x0004 << D3DM_CLIPFLAG_SHIFT)
#define D3DM_CLIPFLAG_USER_MASK (0x0000 << D3DM_CLIPFLAG_SHIFT)
#define D3DM_CLIPFLAG_FRUSTUM_MASK (D3DM_CLIPFLAG_NEAR | D3DM_CLIPFLAG_FAR)
#define D3DM_CLIPFLAG_MASK (D3DM_CLIPFLAG_USER_MASK | D3DM_CLIPFLAG_FRUSTUM_MASK)
#define D3DM_MAX_USER_CLIP_PLANES 0
#define D3DM_NUM_CLIP_PLANES (2 + D3DM_MAX_USER_CLIP_PLANES)
/* Max number of vertices a clipped triangle can generate from front/back clipping */
#define D3DM_MAX_CLIP_VERTICES (3 + D3DM_NUM_CLIP_PLANES)
#define D3DM_MAXVERTEXSIZE ((4 + 3 + 4 + 2 + 2) *sizeof(IMG_FLOAT))
/* Macro to ensure clipped vertex has correct ui32Flags */
#define D3DM_COPY_FLAGBITS(dst, src) \
(dst->ui32Flags = (dst->ui32Flags & D3DM_CLIPFLAG_MASK) | \
(src->ui32Flags & ~D3DM_CLIPFLAG_MASK))
#define D3DM_TNLFLAG_VERTEX_VALIDATED 0x80000000
#endif /* #if !defined(_PRIM_H_) */
/*****************************************************************************
End of file (prim.h)
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -