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

📄 tnl.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 2 页
字号:

   }  /* 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, &param );
         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, &param ); 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, &param ); 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 + -