ARB prog lexer: Fix lexer to eat both DOS and Unix line endings
[mesa.git] / src / mesa / tnl / t_vb_lighttmp.h
index 7af1a4bfabf39b475d0925fd7c79bbfd8cb0122c..124ca3c74fe258b21616263979db681910ffc267 100644 (file)
@@ -28,7 +28,7 @@
  */
 
 
-#if (IDX & LIGHT_TWOSIDE)
+#if IDX & LIGHT_TWOSIDE
 #  define NR_SIDES 2
 #else
 #  define NR_SIDES 1
@@ -56,8 +56,8 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
 
    const GLuint vstride = input->stride;
    const GLfloat *vertex = (GLfloat *)input->data;
-   const GLuint nstride = VB->NormalPtr->stride;
-   const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
+   const GLuint nstride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride;
+   const GLfloat *normal = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data;
 
    GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].data;
    GLfloat (*Fspec)[4] = (GLfloat (*)[4]) store->LitSecondary[0].data;
@@ -68,9 +68,6 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
 
    const GLuint nr = VB->Count;
 
-   (void) nstride;
-   (void) vstride;
-
 #ifdef TRACE
    fprintf(stderr, "%s\n", __FUNCTION__ );
 #endif
@@ -85,10 +82,9 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
    sumA[1] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
 #endif
 
-   /* Side-effects done, can we finish now?
-    */
-   if (stage->changed_inputs == 0)
-      return;
+
+   store->LitColor[0].stride = 16;
+   store->LitColor[1].stride = 16;
 
    for (j = 0; j < nr; j++,STRIDE_F(vertex,vstride),STRIDE_F(normal,nstride)) {
       GLfloat sum[2][3], spec[2][3];
@@ -145,7 +141,7 @@ static void TAG(light_rgba_spec)( GLcontext *ctx,
 
            /* spotlight attenuation */
            if (light->_Flags & LIGHT_SPOT) {
-              GLfloat PV_dot_dir = - DOT3(VP, light->_NormDirection);
+              GLfloat PV_dot_dir = - DOT3(VP, light->_NormSpotDirection);
 
               if (PV_dot_dir<light->_CosCutoff) {
                  continue; /* this light makes no contribution */
@@ -249,12 +245,13 @@ static void TAG(light_rgba)( GLcontext *ctx,
 
    const GLuint vstride = input->stride;
    const GLfloat *vertex = (GLfloat *) input->data;
-   const GLuint nstride = VB->NormalPtr->stride;
-   const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
+   const GLuint nstride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride;
+   const GLfloat *normal = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data;
 
    GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].data;
+#if IDX & LIGHT_TWOSIDE
    GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].data;
-   GLfloat (*color[2])[4];
+#endif
 
    const GLuint nr = VB->Count;
 
@@ -262,12 +259,6 @@ static void TAG(light_rgba)( GLcontext *ctx,
    fprintf(stderr, "%s\n", __FUNCTION__ );
 #endif
 
-   (void) nstride;
-   (void) vstride;
-
-   color[0] = Fcolor;
-   color[1] = Bcolor;
-
    VB->ColorPtr[0] = &store->LitColor[0];
    sumA[0] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
 
@@ -276,25 +267,26 @@ static void TAG(light_rgba)( GLcontext *ctx,
    sumA[1] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
 #endif
 
-   if (stage->changed_inputs == 0)
-      return;
+   store->LitColor[0].stride = 16;
+   store->LitColor[1].stride = 16;
 
    for (j = 0; j < nr; j++,STRIDE_F(vertex,vstride),STRIDE_F(normal,nstride)) {
       GLfloat sum[2][3];
       struct gl_light *light;
 
-      if ( IDX & LIGHT_MATERIAL ) {
-        update_materials( ctx, store );
-        sumA[0] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
+#if IDX & LIGHT_MATERIAL
+      update_materials( ctx, store );
+      sumA[0] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
 #if IDX & LIGHT_TWOSIDE
-         sumA[1] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
+      sumA[1] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
+#endif
 #endif
-      }
 
       COPY_3V(sum[0], base[0]);
 
-      if ( IDX & LIGHT_TWOSIDE )
-        COPY_3V(sum[1], base[1]);
+#if IDX & LIGHT_TWOSIDE
+      COPY_3V(sum[1], base[1]);
+#endif
 
       /* Add contribution from each enabled light source */
       foreach (light, &ctx->Light.EnabledList) {
@@ -333,7 +325,7 @@ static void TAG(light_rgba)( GLcontext *ctx,
 
            /* spotlight attenuation */
            if (light->_Flags & LIGHT_SPOT) {
-              GLfloat PV_dot_dir = - DOT3(VP, light->_NormDirection);
+              GLfloat PV_dot_dir = - DOT3(VP, light->_NormSpotDirection);
 
               if (PV_dot_dir<light->_CosCutoff) {
                  continue; /* this light makes no contribution */
@@ -436,43 +428,55 @@ static void TAG(light_fast_rgba_single)( GLcontext *ctx,
 
 {
    struct light_stage_data *store = LIGHT_STAGE_DATA(stage);
-   const GLuint nstride = VB->NormalPtr->stride;
-   const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
+   const GLuint nstride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride;
+   const GLfloat *normal = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data;
    GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].data;
 #if IDX & LIGHT_TWOSIDE
    GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].data;
 #endif
    const struct gl_light *light = ctx->Light.EnabledList.next;
    GLuint j = 0;
-   GLfloat base[2][3];
+   GLfloat base[2][4];
+#if IDX & LIGHT_MATERIAL
    const GLuint nr = VB->Count;
+#else
+   const GLuint nr = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->count;
+#endif
 
 #ifdef TRACE
    fprintf(stderr, "%s\n", __FUNCTION__ );
 #endif
 
    (void) input;               /* doesn't refer to Eye or Obj */
-   (void) nr;
-   (void) nstride;
 
    VB->ColorPtr[0] = &store->LitColor[0];
 #if IDX & LIGHT_TWOSIDE
    VB->ColorPtr[1] = &store->LitColor[1];
 #endif
 
-   if (stage->changed_inputs == 0)
-      return;
+   if (nr > 1) {
+      store->LitColor[0].stride = 16;
+      store->LitColor[1].stride = 16;
+   }
+   else {
+      store->LitColor[0].stride = 0;
+      store->LitColor[1].stride = 0;
+   }
 
    for (j = 0; j < nr; j++, STRIDE_F(normal,nstride)) {
 
       GLfloat n_dot_VP;
 
-      if ( IDX & LIGHT_MATERIAL )
-        update_materials( ctx, store );
+#if IDX & LIGHT_MATERIAL
+      update_materials( ctx, store );
+#endif
 
       /* No attenuation, so incoporate _MatAmbient into base color.
        */
-      if ( j == 0 || (IDX & LIGHT_MATERIAL) ) {
+#if !(IDX & LIGHT_MATERIAL)
+      if ( j == 0 )
+#endif
+      {
         COPY_3V(base[0], light->_MatAmbient[0]);
         ACC_3V(base[0], ctx->Light._BaseColor[0] );
         base[0][3] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
@@ -532,14 +536,18 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
 {
    struct light_stage_data *store = LIGHT_STAGE_DATA(stage);
    GLfloat sumA[2];
-   const GLuint nstride = VB->NormalPtr->stride;
-   const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
+   const GLuint nstride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride;
+   const GLfloat *normal = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data;
    GLfloat (*Fcolor)[4] = (GLfloat (*)[4]) store->LitColor[0].data;
 #if IDX & LIGHT_TWOSIDE
    GLfloat (*Bcolor)[4] = (GLfloat (*)[4]) store->LitColor[1].data;
 #endif
    GLuint j = 0;
+#if IDX & LIGHT_MATERIAL
    const GLuint nr = VB->Count;
+#else
+   const GLuint nr = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->count;
+#endif
    const struct gl_light *light;
 
 #ifdef TRACE
@@ -547,8 +555,6 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
 #endif
 
    (void) input;
-   (void) nr;
-   (void) nstride;
 
    sumA[0] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
    sumA[1] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
@@ -558,21 +564,27 @@ static void TAG(light_fast_rgba)( GLcontext *ctx,
    VB->ColorPtr[1] = &store->LitColor[1];
 #endif
 
-   if (stage->changed_inputs == 0)
-      return;
+   if (nr > 1) {
+      store->LitColor[0].stride = 16;
+      store->LitColor[1].stride = 16;
+   }
+   else {
+      store->LitColor[0].stride = 0;
+      store->LitColor[1].stride = 0;
+   }
 
    for (j = 0; j < nr; j++, STRIDE_F(normal,nstride)) {
 
       GLfloat sum[2][3];
 
-      if ( IDX & LIGHT_MATERIAL ) {
-        update_materials( ctx, store );
+#if IDX & LIGHT_MATERIAL
+      update_materials( ctx, store );
 
-        sumA[0] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
+      sumA[0] = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_DIFFUSE][3];
 #if IDX & LIGHT_TWOSIDE
-         sumA[1] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
+      sumA[1] = ctx->Light.Material.Attrib[MAT_ATTRIB_BACK_DIFFUSE][3];
+#endif
 #endif
-      }
 
 
       COPY_3V(sum[0], ctx->Light._BaseColor[0]);
@@ -644,8 +656,8 @@ static void TAG(light_ci)( GLcontext *ctx,
    GLuint j;
    const GLuint vstride = input->stride;
    const GLfloat *vertex = (GLfloat *) input->data;
-   const GLuint nstride = VB->NormalPtr->stride;
-   const GLfloat *normal = (GLfloat *)VB->NormalPtr->data;
+   const GLuint nstride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride;
+   const GLfloat *normal = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data;
    GLfloat *indexResult[2];
    const GLuint nr = VB->Count;
 
@@ -653,17 +665,11 @@ static void TAG(light_ci)( GLcontext *ctx,
    fprintf(stderr, "%s\n", __FUNCTION__ );
 #endif
 
-   (void) nstride;
-   (void) vstride;
-
    VB->IndexPtr[0] = &store->LitIndex[0];
 #if IDX & LIGHT_TWOSIDE
    VB->IndexPtr[1] = &store->LitIndex[1];
 #endif
 
-   if (stage->changed_inputs == 0)
-      return;
-
    indexResult[0] = (GLfloat *)VB->IndexPtr[0]->data;
 #if IDX & LIGHT_TWOSIDE
    indexResult[1] = (GLfloat *)VB->IndexPtr[1]->data;
@@ -675,14 +681,15 @@ static void TAG(light_ci)( GLcontext *ctx,
       GLuint side = 0;
       struct gl_light *light;
 
-      if ( IDX & LIGHT_MATERIAL )
-        update_materials( ctx, store );
+#if IDX & LIGHT_MATERIAL
+      update_materials( ctx, store );
+#endif
 
       diffuse[0] = specular[0] = 0.0F;
 
-      if ( IDX & LIGHT_TWOSIDE ) {
+#if IDX & LIGHT_TWOSIDE
         diffuse[1] = specular[1] = 0.0F;
-      }
+#endif
 
       /* Accumulate diffuse and specular from each light source */
       foreach (light, &ctx->Light.EnabledList) {
@@ -714,7 +721,7 @@ static void TAG(light_ci)( GLcontext *ctx,
 
            /* spotlight attenuation */
            if (light->_Flags & LIGHT_SPOT) {
-              GLfloat PV_dot_dir = - DOT3(VP, light->_NormDirection);
+              GLfloat PV_dot_dir = - DOT3(VP, light->_NormSpotDirection);
               if (PV_dot_dir < light->_CosCutoff) {
                  continue; /* this light makes no contribution */
               }