summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/light.c
diff options
context:
space:
mode:
authorMathias Fröhlich <[email protected]>2016-05-22 14:10:19 +0200
committerMathias Fröhlich <[email protected]>2016-06-16 05:50:54 +0200
commitd8a3ac90df67ab1b397b59acdaf4f8e5dc27203a (patch)
tree7142c8d577265a862f90651d5621f9e7ed49b5b3 /src/mesa/main/light.c
parentd4eb2f9cda1fa08949f8e28ef414bbb41e150459 (diff)
mesa: Use bitmask/ffs to iterate color material attributes.
Replaces an iterate and test bit in a bitmask loop by a loop only iterating over the bits set in the bitmask. v2: Use _mesa_bit_scan{,64} instead of open coding. v3: Use u_bit_scan{,64} instead of _mesa_bit_scan{,64}. Reviewed-by: Brian Paul <[email protected]> Signed-off-by: Mathias Fröhlich <[email protected]>
Diffstat (limited to 'src/mesa/main/light.c')
-rw-r--r--src/mesa/main/light.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index ad9cef1dc4c..87a06db309d 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -706,13 +706,14 @@ _mesa_update_material( struct gl_context *ctx, GLuint bitmask )
void
_mesa_update_color_material( struct gl_context *ctx, const GLfloat color[4] )
{
- const GLbitfield bitmask = ctx->Light._ColorMaterialBitmask;
+ GLbitfield bitmask = ctx->Light._ColorMaterialBitmask;
struct gl_material *mat = &ctx->Light.Material;
- int i;
- for (i = 0 ; i < MAT_ATTRIB_MAX ; i++)
- if (bitmask & (1<<i))
- COPY_4FV( mat->Attrib[i], color );
+ while (bitmask) {
+ const int i = u_bit_scan(&bitmask);
+
+ COPY_4FV( mat->Attrib[i], color );
+ }
_mesa_update_material( ctx, bitmask );
}