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

📄 vertex.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* ************************************************************************* *\
** ************************************************************************* **
**
**    INTEL Corporation Proprietary Information
**
**    This listing is supplied under the terms of a license
**    agreement with INTEL Corporation and may not be copied
**    nor disclosed except in accordance with the terms of
**    that agreement.
**
**    Copyright (c) 2003 Intel Corporation.
**    All Rights Reserved.
**
** ************************************************************************* **
\* ************************************************************************* */

/**************************************************************************
 * Name         : vertex.c
 * Author       : BCB
 * Created      : 01/05/2003
 *
 * Copyright    : 2003 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.
 *
 * Platform     : ANSI
 **************************************************************************/
#define MODULE_ID MODID_VERTEX

#include "context.h"

#include "HXFProfiler.h"
#include "CTL.h"

// from hxfslaveport.c
void* HXFBeginPrimitiveList   ( void*, void*, void*, CTLU32 );
void* HXFBeginClippedTriList  ( void* );
void* HXFBeginClippedLineList ( void* );
void* HXFEndPrimitiveList     ( void* );

// from UtilsARM.s
void HXFCountVertices_8To16( HUINT16* pIndices, const HUINT8* pSrcIndices, HUINT32 NumIndices,
      HUINT32* out_pMinIndex, HUINT32* out_pMaxIndex );

void HXFCountVertices( const HUINT16* pIndices, HUINT32 NumIndices, HUINT32* out_pMinIndex, 
      HUINT32* out_pMaxIndex );

/***********************************************************************************
 Function Name      : glClientActiveTexture
 Inputs             : texture
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Sets current texture coordinate array unit.
************************************************************************************/
GLAPI void APIENTRY glClientActiveTexture(GLenum texture)
{
	IMG_UINT32 ui32Unit;
	__GL_GET_CONTEXT();
	HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);

	ui32Unit = texture - GL_TEXTURE0;

    if (ui32Unit < 0 || ui32Unit >= GLES_MAX_TEXTURE_UNITS)
	{
		SetError(gc, GL_INVALID_ENUM);
		return;
    }

	gc->ui32ClientActiveTexture = ui32Unit;
	HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
}

/***********************************************************************************
 Function Name      : glEnableClientState
 Inputs             : array
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Enables coordinate array specified by array
************************************************************************************/

GLAPI void APIENTRY glEnableClientState(GLenum array)
{
	__GL_GET_CONTEXT();
	HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);

	switch(array)
	{
		case GL_VERTEX_ARRAY:
			gc->sVertexArray.ui32ArrayEnables |= VARRAY_VERT_ENABLE;
			break;
		case GL_NORMAL_ARRAY:
			gc->sVertexArray.ui32ArrayEnables |= VARRAY_NORMAL_ENABLE;
			break;
		case GL_COLOR_ARRAY:
			gc->sVertexArray.ui32ArrayEnables |= VARRAY_COLOR_ENABLE;
			break;
		case GL_TEXTURE_COORD_ARRAY:
			gc->sVertexArray.ui32ArrayEnables |= (VARRAY_TEXCOORD0_ENABLE<<gc->ui32ClientActiveTexture);
			break;
		default:
			SetError(gc, GL_INVALID_ENUM);
			return;
	}

	gc->ui32DirtyMask |= GLES_DIRTY_SW_VARRAY;


	HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
}

/***********************************************************************************
 Function Name      : glDisableClientState
 Inputs             : array
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Disables coordinate array specified by array.
************************************************************************************/
GLAPI void APIENTRY glDisableClientState(GLenum array)
{
	__GL_GET_CONTEXT();
	HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);

	switch(array)
	{
		case GL_VERTEX_ARRAY:
			gc->sVertexArray.ui32ArrayEnables &= ~VARRAY_VERT_ENABLE;
			break;
		case GL_NORMAL_ARRAY:
			gc->sVertexArray.ui32ArrayEnables &= ~VARRAY_NORMAL_ENABLE;
			break;
		case GL_COLOR_ARRAY:
			gc->sVertexArray.ui32ArrayEnables &= ~VARRAY_COLOR_ENABLE;
			break;
		case GL_TEXTURE_COORD_ARRAY:
			gc->sVertexArray.ui32ArrayEnables &= ~(VARRAY_TEXCOORD0_ENABLE<<gc->ui32ClientActiveTexture);
			break;
		default:
			SetError(gc, GL_INVALID_ENUM);
			return;
	}

	gc->ui32DirtyMask |= GLES_DIRTY_SW_VARRAY;

	HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
}

/***********************************************************************************
 Function Name      : glColor4[f/x]
 Inputs             : red, green, blue, alpha
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Sets current color
************************************************************************************/
#if defined( PROFILE_COMMON )

GLAPI void APIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
   {
   __GL_GET_CONTEXT();

   gc->sState.sCurrent.Color = *((CTLCOLOR4*)&red);

   }

GLAPI void APIENTRY glColor4x( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha )
   {
   glColor4f( XtoF( red ), XtoF( green ), XtoF( blue ), XtoF( alpha ));
   }  /* glColor4x */

#elif defined( PROFILE_COMMON_LITE )

GLAPI void APIENTRY glColor4x( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha )
   {
   __GL_GET_CONTEXT();

   HXF_PROFILER_START( HXFPROFILE_STATE_VERTEX );

   gc->sState.sCurrent.Color = *((CTLCOLOR4*)&red);

   HXF_PROFILER_STOP( HXFPROFILE_STATE_VERTEX );

   }  /* glColorx */

#else
#error "Profile not defined for glColor"
#endif

/***********************************************************************************
 Function Name      : glMultiTexCoord4[f/x]
 Inputs             : target, s, t, r, q
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Sets current texture coordinate on unit specified
					  by target.
************************************************************************************/
#if defined(PROFILE_COMMON)

GLAPI void APIENTRY glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
{
	IMG_UINT32 ui32Unit = target - GL_TEXTURE0;
	__GL_GET_CONTEXT();
	HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);

	if (ui32Unit < 0 || ui32Unit >= GLES_MAX_TEXTURE_UNITS)
	{
		SetError(gc, GL_INVALID_ENUM);
		return;
    }

	gc->sState.sCurrent.aTextureCoords[ui32Unit].x = s;
	gc->sState.sCurrent.aTextureCoords[ui32Unit].y = t;
	gc->sState.sCurrent.aTextureCoords[ui32Unit].z = r;
	gc->sState.sCurrent.aTextureCoords[ui32Unit].w = q;
	HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
}

GLAPI void APIENTRY glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
   {
   glMultiTexCoord4f( target, XtoF( s ), XtoF( t ), XtoF( r ), XtoF( q ));
   }

#elif defined( PROFILE_COMMON_LITE )

GLAPI void APIENTRY glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
{
	IMG_UINT32 ui32Unit = target - GL_TEXTURE0;
	__GL_GET_CONTEXT();
	HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);

	if (ui32Unit < 0 || ui32Unit >= GLES_MAX_TEXTURE_UNITS)
	{
		SetError(gc, GL_INVALID_ENUM);
		return;
    }

	gc->sState.sCurrent.aTextureCoords[ui32Unit].x = s;
	gc->sState.sCurrent.aTextureCoords[ui32Unit].y = t;
	gc->sState.sCurrent.aTextureCoords[ui32Unit].z = r;
	gc->sState.sCurrent.aTextureCoords[ui32Unit].w = q;
	HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
}

#endif

/***********************************************************************************
 Function Name      : glNormal3[f/x]
 Inputs             : nx, ny, nz
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Sets current normal.
************************************************************************************/
#if defined(PROFILE_COMMON)

GLAPI void APIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
{
	__GL_GET_CONTEXT();
	HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);

   gc->sState.sCurrent.Normal = *((CTLVECTOR3*)&nx);
}
#endif

GLAPI void APIENTRY glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz)
{
	__GL_GET_CONTEXT();
	HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);

   gc->sState.sCurrent.Normal = *((CTLVECTOR3*)&nx);
}


/***********************************************************************************
 Function Name      : glColorPointer
 Inputs             : size, type, stride, pointer
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Sets array pointer/size/type  for color data
************************************************************************************/
GLAPI void APIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
   {
   CTL_ARRAY_FORMAT ctlFmt = CTLAFORMAT_NONE;
   HUINT32 ui32ImpliedStride;

   __GL_GET_CONTEXT();
   HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);

   if (stride < 0 || size != 4)
      {
      SetError(gc, GL_INVALID_VALUE);
      return;
      }

   switch(type)
      {
      case GL_UNSIGNED_BYTE:
         ctlFmt = CTLAFORMAT_UINT8;
         ui32ImpliedStride = 4;
         break;

      case GL_FIXED:
         ctlFmt = CTLAFORMAT_FIXED;
         ui32ImpliedStride = 16;
         break;

#if defined(PROFILE_COMMON)
      case GL_FLOAT:
         ctlFmt = CTLAFORMAT_FLOAT;
         ui32ImpliedStride = 16;
         break;
#endif

      default:
         SetError(gc, GL_INVALID_ENUM);
         return;
      }

   if(stride == 0)
      {
      stride = ui32ImpliedStride;
      }

   gc->sVertexArray.sCPState.ctlFormat   = ctlFmt;
   gc->sVertexArray.sCPState.pui8Pointer = (IMG_UINT8 *)pointer;
   gc->sVertexArray.sCPState.ui32Stride  = stride;
   gc->sVertexArray.sCPState.ui32Size    = size;
   
   HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);

   }  /* glColorPointer */


/***********************************************************************************
 Function Name      : glSecondaryColorPointer
 Inputs             : size, type, stride, pointer
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Sets array pointer/size/type  for color data
************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -