📄 tnl.c
字号:
} /* glLightf */
GLAPI void APIENTRY glLightxv( GLenum light, GLenum pname, GLfixed const * params )
{
GLfloat paramsf[4] = { 0.0f };
__GL_GET_CONTEXT();
switch( pname )
{
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_SPECULAR:
case GL_POSITION:
ArrayXtoF( paramsf, params, 4 );
break;
case GL_SPOT_DIRECTION:
ArrayXtoF( paramsf, params, 3 );
break;
case GL_SPOT_CUTOFF:
case GL_SPOT_EXPONENT:
case GL_CONSTANT_ATTENUATION:
case GL_LINEAR_ATTENUATION:
case GL_QUADRATIC_ATTENUATION:
paramsf[0] = XtoF( *params );
break;
default:
SetError( gc, GL_INVALID_ENUM );
return;
} // switch
glLightfv( light, pname, paramsf );
} /* glLightxv */
GLAPI void APIENTRY glLightx(GLenum light, GLenum pname, GLfixed param )
{
glLightf( light, pname, XtoF( param ));
} /* glLightx */
#elif defined( PROFILE_COMMON_LITE )
GLAPI void APIENTRY glLightxv( GLenum light, GLenum pname, GLfixed const * params )
{
__GL_GET_CONTEXT();
Lightv( gc, light, pname, params );
} /* glLightxv */
GLAPI void APIENTRY glLightx( GLenum light, GLenum pname, GLfixed param )
{
__GL_GET_CONTEXT();
switch( pname )
{
case GL_SPOT_CUTOFF:
case GL_SPOT_EXPONENT:
case GL_CONSTANT_ATTENUATION:
case GL_LINEAR_ATTENUATION:
case GL_QUADRATIC_ATTENUATION:
Lightv( gc, light, pname, ¶m );
break;
default:
SetError( gc, GL_INVALID_ENUM );
break;
} // switch
} /* glLightx */
#else
#error "*** Profile not defined for glLight"
#endif /* PROFILE */
/***********************************************************************************
Function Name : Materialxv
Inputs : gc, ui32Face, ePname, pfParams
Outputs : -
Returns : -
Description :
************************************************************************************/
static IMG_VOID Materialv( GLESContext* gc, GLenum ui32Face, GLenum ePname, NATIVE const * pParams )
{
GLESmaterialState *psMs = &gc->sState.sLight.sMaterial;
if( ui32Face != GL_FRONT_AND_BACK )
{
SetError( gc, GL_INVALID_ENUM );
return;
} // if
HXF_PROFILER_START( HXFPROFILE_STATE_LIGHT );
switch( ePname )
{
case GL_AMBIENT:
memcpy( &psMs->ctlMaterial.sAmbient, pParams, 4 * sizeof( NATIVE ));
break; /* GL_AMBIENT */
case GL_AMBIENT_AND_DIFFUSE:
memcpy( &psMs->ctlMaterial.sAmbient, pParams, 4 * sizeof( NATIVE ));
memcpy( &psMs->ctlMaterial.sDiffuse, pParams, 4 * sizeof( NATIVE ));
break; /* GL_AMBIENT_AND_DIFFUSE */
case GL_DIFFUSE:
memcpy( &psMs->ctlMaterial.sDiffuse, pParams, 4 * sizeof( NATIVE ));
break; /* GL_DIFFUSE */
case GL_EMISSION:
memcpy( &psMs->ctlMaterial.sEmissive, pParams, 4 * sizeof( NATIVE ));
break; /* GL_EMISSION */
case GL_SPECULAR:
memcpy( &psMs->ctlMaterial.sSpecular, pParams, 4 * sizeof( NATIVE ));
break; /* GL_SPECULAR */
case GL_SHININESS:
if(( pParams[0] < nZERO ) || ( pParams[0] > I32toNATIVE( 128 )))
{
SetError( gc, GL_INVALID_VALUE);
return;
}
psMs->ctlMaterial.Power = pParams[0];
break; /* GL_SHININESS */
default:
SetError( gc, GL_INVALID_ENUM );
break;
} // switch
HXF_PROFILER_STOP( HXFPROFILE_STATE_LIGHT );
} /* Materialv */
/***********************************************************************************
Function Name : glMaterial[f/fv/x/xv]
Inputs : ui32Face, pname, param
Outputs : -
Returns : -
Description : ENTRYPOINT: Sets material parameter specified by pname.
************************************************************************************/
#if defined( PROFILE_COMMON )
GLAPI void APIENTRY glMaterialfv( GLenum ui32Face, GLenum pname, GLfloat const * params )
{
__GL_GET_CONTEXT();
Materialv( gc, ui32Face, pname, params );
} /* glMaterialfv */
GLAPI void APIENTRY glMaterialf( GLenum ui32Face, GLenum pname, GLfloat param )
{
__GL_GET_CONTEXT();
switch( pname )
{
case GL_SHININESS: Materialv( gc, ui32Face, pname, ¶m ); break;
default: SetError( gc, GL_INVALID_ENUM ); break;
} // switch
} /* glMaterialf */
GLAPI void APIENTRY glMaterialxv( GLenum ui32Face, GLenum pname, GLfixed const * params )
{
GLfloat paramsf[4] = { 0.0f };
__GL_GET_CONTEXT();
switch( pname )
{
case GL_AMBIENT:
case GL_AMBIENT_AND_DIFFUSE:
case GL_DIFFUSE:
case GL_EMISSION:
case GL_SPECULAR:
ArrayXtoF( paramsf, params, 4 );
break;
case GL_SHININESS:
paramsf[0] = XtoF( *params );
break;
default:
SetError( gc, GL_INVALID_ENUM );
return;
} // switch
glMaterialfv( ui32Face, pname, paramsf );
} /* glMaterialxv */
GLAPI void APIENTRY glMaterialx( GLenum ui32Face, GLenum pname, GLfixed param )
{
glMaterialf( ui32Face, pname, XtoF( param ));
} /* glMaterialx */
#elif defined( PROFILE_COMMON_LITE )
GLAPI void APIENTRY glMaterialxv( GLenum ui32Face, GLenum pname, GLfixed const * params )
{
__GL_GET_CONTEXT();
Materialv(gc, ui32Face, pname, params);
} /* glMaterialxv */
GLAPI void APIENTRY glMaterialx( GLenum ui32Face, GLenum pname, GLfixed param )
{
__GL_GET_CONTEXT();
switch( pname )
{
case GL_SHININESS: Materialv( gc, ui32Face, pname, ¶m ); break;
default: SetError( gc, GL_INVALID_ENUM ); break;
} // switch
} /* glMaterialx */
#else
#error "*** Profile not defined for glMaterial"
#endif /* PROFILE */
/***********************************************************************************
Function Name : InitLightingState
Inputs : gc
Outputs : -
Returns : -
Description : Initialize internal Lighting state
************************************************************************************/
IMG_BOOL InitLightingState( GLESContext* gc )
{
NATIVE DefaultAmbient[4] = { F32toNATIVE(0.2f), F32toNATIVE(0.2f), F32toNATIVE(0.2f), nONE };
NATIVE DefaultDiffuse[4] = { F32toNATIVE(0.8f), F32toNATIVE(0.8f), F32toNATIVE(0.8f), nONE };
NATIVE DefaultBlack[4] = { nZERO, nZERO, nZERO, nONE };
NATIVE DefaultWhite[4] = { nONE, nONE, nONE, nONE };
NATIVE DefaultPosition[4] = { nZERO, nZERO, nONE, nZERO };
NATIVE DefaultDirection[3] = { nZERO, nZERO, -nONE };
GLuint i;
GLESmaterialState *psMaterialState = 0;
GLESlightSourceState *psLightState = 0;
/* Init global ambient and sync with CTL */
memcpy( &gc->sState.sLight.sModel.Ambient, DefaultAmbient, 4 * sizeof( NATIVE ));
CTL_SetStateVariableV( gc->sTransform.ctl, CTLSTATE_LIGHT_AMBIENT,
&gc->sState.sLight.sModel.Ambient );
/* Init material state and sync with CTL */
psMaterialState = &gc->sState.sLight.sMaterial;
memcpy( &psMaterialState->ctlMaterial.sAmbient, DefaultAmbient, 4 * sizeof( NATIVE ));
memcpy( &psMaterialState->ctlMaterial.sDiffuse, DefaultDiffuse, 4 * sizeof( NATIVE ));
memcpy( &psMaterialState->ctlMaterial.sSpecular, DefaultBlack, 4 * sizeof( NATIVE ));
memcpy( &psMaterialState->ctlMaterial.sEmissive, DefaultBlack, 4 * sizeof( NATIVE ));
psMaterialState->ctlMaterial.Power = nZERO;
CTL_SetMaterial( gc->sTransform.ctl, &psMaterialState->ctlMaterial );
/* Init each light's state and sync with CTL */
psLightState = &gc->sState.sLight.sLights[0];
for( i = 0; i < GLES_MAX_LIGHTS; i++ )
{
memcpy( &psLightState->ctlLight.sAmbient, DefaultWhite, 4 * sizeof( NATIVE ));
memcpy( &psLightState->ctlLight.sDiffuse, DefaultBlack, 4 * sizeof( NATIVE ));
memcpy( &psLightState->ctlLight.sSpecular, DefaultBlack, 4 * sizeof( NATIVE ));
// first light is a special case
if( 0 == i )
{
memcpy( &psLightState->ctlLight.sDiffuse, DefaultWhite, 4 * sizeof( NATIVE ));
} // if
psLightState->Flags |= GLES_LIGHT_SPECULAR_ENABLE;
memcpy( &psLightState->ctlLight.sPosition, DefaultPosition, 4 * sizeof( NATIVE ));
memcpy( &psLightState->ctlLight.sDirection, DefaultDirection, 3 * sizeof( NATIVE ));
psLightState->ctlLight.SpotExponent = nZERO;
psLightState->ctlLight.SpotCutoff = I32toNATIVE( 180 );
psLightState->ctlLight.Attenuation[0] = nONE;
psLightState->ctlLight.Attenuation[1] = nZERO;
psLightState->ctlLight.Attenuation[2] = nZERO;
CTL_SetLight( gc->sTransform.ctl, i, &psLightState->ctlLight );
psLightState++;
} // for - init each light
return IMG_TRUE;
} /* InitLightingState */
/***********************************************************************************
Function Name : FreeLightingState
Inputs : gc
Outputs : -
Returns : -
Description : Free internal Lighting state
************************************************************************************/
IMG_VOID FreeLightingState(GLESContext *gc)
{
}
/* ************************************************************************* *\
** ************************************************************************* **
** EOF
** ************************************************************************* **
\* ************************************************************************* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -