📄 vertex.c
字号:
GLAPI void APIENTRY glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride,
const GLvoid *pointer)
{
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:
ui32ImpliedStride = 4;
break;
case GL_FIXED:
ui32ImpliedStride = 16;
break;
#if defined(PROFILE_COMMON)
case GL_FLOAT:
ui32ImpliedStride = 16;
break;
#endif
default:
SetError(gc, GL_INVALID_ENUM);
return;
}
if(stride == 0)
{
stride = ui32ImpliedStride;
}
gc->sVertexArray.sSCPState.ctlFormat = CTLAFORMAT_NONE;
gc->sVertexArray.sSCPState.pui8Pointer = (IMG_UINT8 *)pointer;
gc->sVertexArray.sSCPState.ui32Stride = stride;
gc->sVertexArray.sSCPState.ui32Size = size;
HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
} /* glSecondaryColorPointer */
/***********************************************************************************
Function Name : glNormalPointer
Inputs : type, stride, pointer
Outputs : -
Returns : -
Description : ENTRYPOINT: Sets array pointer/type for normal data
************************************************************************************/
GLAPI void APIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
{
CTL_ARRAY_FORMAT ctlFmt = CTLAFORMAT_NONE;
IMG_UINT32 ui32ImpliedStride;
__GL_GET_CONTEXT();
HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);
if (stride < 0)
{
SetError(gc, GL_INVALID_VALUE);
return;
}
switch(type)
{
case GL_BYTE:
ctlFmt = CTLAFORMAT_INT8;
ui32ImpliedStride = 3;
break;
case GL_SHORT:
ctlFmt = CTLAFORMAT_INT16;
ui32ImpliedStride = 6;
break;
case GL_FIXED:
ctlFmt = CTLAFORMAT_FIXED;
ui32ImpliedStride = 12;
break;
#if defined(PROFILE_COMMON)
case GL_FLOAT:
ctlFmt = CTLAFORMAT_FLOAT;
ui32ImpliedStride = 12;
break;
#endif
default:
SetError(gc, GL_INVALID_ENUM);
return;
}
if(stride == 0)
{
stride = ui32ImpliedStride;
}
gc->sVertexArray.sNPState.ctlFormat = ctlFmt;
gc->sVertexArray.sNPState.pui8Pointer = (IMG_UINT8 *)pointer;
gc->sVertexArray.sNPState.ui32Stride = stride;
gc->sVertexArray.sNPState.ui32Size = 3;
HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
} /* glNormalPointer */
/***********************************************************************************
Function Name : glTexCoordPointer
Inputs : size, type, stride, pointer
Outputs : -
Returns : -
Description : ENTRYPOINT: Sets array pointer/size/type for texcoord data.
Applies to active texture coordinate array unit.
************************************************************************************/
GLAPI void APIENTRY glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
{
CTL_ARRAY_FORMAT ctlFmt = CTLAFORMAT_NONE;
IMG_UINT32 ui32ImpliedStride;
IMG_UINT32 ui32Unit = 0;
__GL_GET_CONTEXT();
HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);
ui32Unit = gc->ui32ClientActiveTexture;
if (stride < 0 || size < 2 || size > 4)
{
SetError(gc, GL_INVALID_VALUE);
return;
}
switch(type)
{
case GL_BYTE:
ctlFmt = CTLAFORMAT_INT8;
ui32ImpliedStride = size;
break;
case GL_SHORT:
ctlFmt = CTLAFORMAT_INT16;
ui32ImpliedStride = 2 * size;
break;
case GL_FIXED:
ctlFmt = CTLAFORMAT_FIXED;
ui32ImpliedStride = 4 * size;
break;
#if defined(PROFILE_COMMON)
case GL_FLOAT:
ctlFmt = CTLAFORMAT_FLOAT;
ui32ImpliedStride = 4 * size;
break;
#endif
default:
SetError(gc, GL_INVALID_ENUM);
return;
}
if(stride == 0)
{
stride = ui32ImpliedStride;
}
gc->sVertexArray.asTPState[ui32Unit].ctlFormat = ctlFmt;
gc->sVertexArray.asTPState[ui32Unit].pui8Pointer = (IMG_UINT8 *)pointer;
gc->sVertexArray.asTPState[ui32Unit].ui32Stride = stride;
gc->sVertexArray.asTPState[ui32Unit].ui32Size = size;
HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
} /* glTexCoordPointer */
/***********************************************************************************
Function Name : glVertexPointer
Inputs : size, type, stride, pointer
Outputs : -
Returns : -
Description : ENTRYPOINT: Sets array pointer/size/type for vertex data
************************************************************************************/
GLAPI void APIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride,
const GLvoid *pointer)
{
CTL_ARRAY_FORMAT ctlFmt = CTLAFORMAT_NONE;
IMG_UINT32 ui32ImpliedStride;
__GL_GET_CONTEXT();
HXF_PROFILER_START(HXFPROFILE_STATE_VERTEX);
if (stride < 0 || size < 2 || size > 4)
{
SetError(gc, GL_INVALID_VALUE);
return;
}
switch(type)
{
case GL_BYTE:
ctlFmt = CTLAFORMAT_INT8;
ui32ImpliedStride = size;
break;
case GL_SHORT:
ctlFmt = CTLAFORMAT_INT16;
ui32ImpliedStride = 2 * size;
break;
case GL_FIXED:
ctlFmt = CTLAFORMAT_FIXED;
ui32ImpliedStride = 4 *size;
break;
#if defined(PROFILE_COMMON)
case GL_FLOAT:
ctlFmt = CTLAFORMAT_FLOAT;
ui32ImpliedStride = 4 * size;
break;
#endif
default:
SetError(gc, GL_INVALID_ENUM);
return;
}
if(stride == 0)
{
stride = ui32ImpliedStride;
}
gc->sVertexArray.sVPState.ctlFormat = ctlFmt;
gc->sVertexArray.sVPState.pui8Pointer = (IMG_UINT8 *)pointer;
gc->sVertexArray.sVPState.ui32Stride = stride;
gc->sVertexArray.sVPState.ui32Size = size;
HXF_PROFILER_STOP(HXFPROFILE_STATE_VERTEX);
} /* glVertexPointer */
/***********************************************************************************
Function Name : SetupPrimitiveType
Inputs :
Outputs : -
Returns : -
Description :
************************************************************************************/
static HBOOL SetupPrimitiveType( GLESContext* gc, GLenum mode, GLint NumIndices,
CTL_PRIMITIVE_TYPE* pPT, CTLU32* pu32NumPrimitives )
{
gc->sHWContext.ui32PrimitiveHeader &= MBX1_TAOBJTYPE_TYPECLRMASK;
*pPT = CTLPRIMITIVE_POINTS;
*pu32NumPrimitives = 0;
switch(mode)
{
case GL_POINTS:
gc->sHWContext.ui32PrimitiveHeader = MBX1_TAOBJTYPE_POINTS | gc->sHWContext.ui32PrimitiveHeader;
CTL_SetStateVariable( gc->sTransform.ctl, CTLSTATE_POINTSIZE,
*((CTLU32*)gc->sState.sPoint.pfPointSize) );
*pu32NumPrimitives = NumIndices;
*pPT = CTLPRIMITIVE_POINTS;
break; // GL_POINTS
case GL_LINES:
gc->sHWContext.ui32PrimitiveHeader = MBX1_TAOBJTYPE_VERTEXLINESTRIP | gc->sHWContext.ui32PrimitiveHeader;
CTL_SetStateVariable( gc->sTransform.ctl, CTLSTATE_LINEWIDTH,
*((CTLU32*)gc->sState.sLine.pfLineWidth) );
*pu32NumPrimitives = NumIndices >> 1;
*pPT = CTLPRIMITIVE_LINELIST;
break; // GL_LINES
case GL_LINE_LOOP:
gc->sHWContext.ui32PrimitiveHeader = MBX1_TAOBJTYPE_VERTEXLINESTRIP | gc->sHWContext.ui32PrimitiveHeader;
CTL_SetStateVariable( gc->sTransform.ctl, CTLSTATE_LINEWIDTH,
*((CTLU32*)gc->sState.sLine.pfLineWidth) );
*pu32NumPrimitives = NumIndices - 1;
*pPT = CTLPRIMITIVE_LINELOOP;
break; // GL_LINE_LOOP
case GL_LINE_STRIP:
gc->sHWContext.ui32PrimitiveHeader = MBX1_TAOBJTYPE_VERTEXLINESTRIP | gc->sHWContext.ui32PrimitiveHeader;
CTL_SetStateVariable( gc->sTransform.ctl, CTLSTATE_LINEWIDTH,
*((CTLU32*)gc->sState.sLine.pfLineWidth) );
*pu32NumPrimitives = NumIndices - 1;
*pPT = CTLPRIMITIVE_LINESTRIP;
break; // GL_LINE_STRIP
case GL_TRIANGLES:
gc->sHWContext.ui32PrimitiveHeader = MBX1_TAOBJTYPE_VERTEXFACELIST | gc->sHWContext.ui32PrimitiveHeader;
*pu32NumPrimitives = NumIndices / 3;
*pPT = CTLPRIMITIVE_TRILIST;
break; // GL_TRIANGLES
case GL_TRIANGLE_STRIP:
gc->sHWContext.ui32PrimitiveHeader = MBX1_TAOBJTYPE_VERTEXFACESTRIP | gc->sHWContext.ui32PrimitiveHeader;
*pu32NumPrimitives = NumIndices - 2;
*pPT = CTLPRIMITIVE_TRISTRIP;
break; // GL_TRIANGLE_STRIP
case GL_TRIANGLE_FAN:
gc->sHWContext.ui32PrimitiveHeader = MBX1_TAOBJTYPE_VERTEXFACEFAN | gc->sHWContext.ui32PrimitiveHeader;
*pu32NumPrimitives = NumIndices - 2;
*pPT = CTLPRIMITIVE_TRIFAN;
break; // GL_TRIANGLE_FAN
default:
SetError(gc, GL_INVALID_ENUM);
return HFALSE;
} // switch
return HTRUE;
} /* SetupPrimitiveType */
/***********************************************************************************
Function Name : SetupPrimitiveType
Inputs :
Outputs : -
Returns : -
Description :
************************************************************************************/
static void DoDrawPrimitive(GLESContext* gc,
GLenum mode, GLint FirstVtx,
GLint VtxCount,
GLint NumIndices,
IMG_UINT16* pIndices)
{
CTL_PRIMITIVE_TYPE ctlPT = CTLPRIMITIVE_POINTS;
CTLU32 u32NumPrimitives = 0;
if(!SetupPrimitiveType(gc, mode, NumIndices, &ctlPT, &u32NumPrimitives ))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -