mesa: Move ROUND_DOWN_TO() macro from i915/i965 to macros.h.
[mesa.git] / src / mesa / tnl / t_rasterpos.c
index 3596d162b2350bd1961bc9323163a69e48357947..3ee5c454793f0bfeacb6f8989db5392755108a7a 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Mesa 3-D graphics library
- * Version:  7.1
  *
  * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 
 #include "main/glheader.h"
 #include "main/colormac.h"
-#include "main/context.h"
 #include "main/feedback.h"
 #include "main/light.h"
 #include "main/macros.h"
@@ -85,7 +84,7 @@ viewclip_point_z( const GLfloat v[] )
  * \return zero if the point was clipped, or one otherwise.
  */
 static GLuint
-userclip_point( GLcontext *ctx, const GLfloat v[] )
+userclip_point( struct gl_context *ctx, const GLfloat v[] )
 {
    GLuint p;
 
@@ -106,16 +105,15 @@ userclip_point( GLcontext *ctx, const GLfloat v[] )
 
 
 /**
- * Compute lighting for the raster position.  Both RGB and CI modes computed.
+ * Compute lighting for the raster position.  RGB modes computed.
  * \param ctx the context
  * \param vertex vertex location
  * \param normal normal vector
  * \param Rcolor returned color
  * \param Rspec returned specular color (if separate specular enabled)
- * \param Rindex returned color index
  */
 static void
-shade_rastpos(GLcontext *ctx,
+shade_rastpos(struct gl_context *ctx,
               const GLfloat vertex[4],
               const GLfloat normal[3],
               GLfloat Rcolor[4],
@@ -124,9 +122,6 @@ shade_rastpos(GLcontext *ctx,
    /*const*/ GLfloat (*base)[3] = ctx->Light._BaseColor;
    const struct gl_light *light;
    GLfloat diffuseColor[4], specularColor[4];  /* for RGB mode only */
-   GLfloat diffuseCI = 0.0, specularCI = 0.0;  /* for CI mode only */
-
-   _mesa_validate_all_lighting_tables( ctx );
 
    COPY_3V(diffuseColor, base[0]);
    diffuseColor[3] = CLAMP( 
@@ -170,10 +165,7 @@ shade_rastpos(GLcontext *ctx,
               continue;
            }
            else {
-              double x = PV_dot_dir * (EXP_TABLE_SIZE-1);
-              int k = (int) x;
-              GLfloat spot = (GLfloat) (light->_SpotExpTable[k][0]
-                              + (x-k)*light->_SpotExpTable[k][1]);
+               GLfloat spot = powf(PV_dot_dir, light->SpotExponent);
               attenuation *= spot;
            }
         }
@@ -192,7 +184,6 @@ shade_rastpos(GLcontext *ctx,
       /* Ambient + diffuse */
       COPY_3V(diffuseContrib, light->_MatAmbient[0]);
       ACC_SCALE_SCALAR_3V(diffuseContrib, n_dot_VP, light->_MatDiffuse[0]);
-      diffuseCI += n_dot_VP * light->_dli * attenuation;
 
       /* Specular */
       {
@@ -221,8 +212,11 @@ shade_rastpos(GLcontext *ctx,
         n_dot_h = DOT3(normal, h);
 
         if (n_dot_h > 0.0F) {
+           GLfloat shine;
            GLfloat spec_coef;
-           GET_SHINE_TAB_ENTRY( ctx->_ShineTable[0], n_dot_h, spec_coef );
+
+           shine = ctx->Light.Material.Attrib[MAT_ATTRIB_FRONT_SHININESS][0];
+           spec_coef = powf(n_dot_h, shine);
 
            if (spec_coef > 1.0e-10) {
                if (ctx->Light.Model.ColorControl==GL_SEPARATE_SPECULAR_COLOR) {
@@ -233,8 +227,6 @@ shade_rastpos(GLcontext *ctx,
                   ACC_SCALE_SCALAR_3V( diffuseContrib, spec_coef,
                                        light->_MatSpecular[0]);
                }
-               /*assert(light->_sli > 0.0);*/
-               specularCI += spec_coef * light->_sli * attenuation;
            }
         }
       }
@@ -264,7 +256,7 @@ shade_rastpos(GLcontext *ctx,
  * \param texcoord  incoming texcoord and resulting texcoord
  */
 static void
-compute_texgen(GLcontext *ctx, const GLfloat vObj[4], const GLfloat vEye[4],
+compute_texgen(struct gl_context *ctx, const GLfloat vObj[4], const GLfloat vEye[4],
                const GLfloat normal[3], GLuint unit, GLfloat texcoord[4])
 {
    const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
@@ -279,7 +271,7 @@ compute_texgen(GLcontext *ctx, const GLfloat vObj[4], const GLfloat vEye[4],
    rz = u[2] - normal[2] * two_nu;
    m = rx * rx + ry * ry + (rz + 1.0F) * (rz + 1.0F);
    if (m > 0.0F)
-      mInv = 0.5F * _mesa_inv_sqrtf(m);
+      mInv = 0.5F * INV_SQRTF(m);
    else
       mInv = 0.0F;
 
@@ -374,7 +366,7 @@ compute_texgen(GLcontext *ctx, const GLfloat vObj[4], const GLfloat vEye[4],
  * \param vObj  vertex position in object space
  */
 void
-_tnl_RasterPos(GLcontext *ctx, const GLfloat vObj[4])
+_tnl_RasterPos(struct gl_context *ctx, const GLfloat vObj[4])
 {
    if (ctx->VertexProgram._Enabled) {
       /* XXX implement this */
@@ -437,7 +429,7 @@ _tnl_RasterPos(GLcontext *ctx, const GLfloat vObj[4])
          ctx->Current.RasterDistance = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
       else
          ctx->Current.RasterDistance =
-                        SQRTF( eye[0]*eye[0] + eye[1]*eye[1] + eye[2]*eye[2] );
+                        sqrtf( eye[0]*eye[0] + eye[1]*eye[1] + eye[2]*eye[2] );
 
       /* compute transformed normal vector (for lighting or texgen) */
       if (ctx->_NeedEyeCoords) {