⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prim.h

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 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 + -