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 <brianp@vmware.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -233,10 +233,12 @@ prepare_materials(struct gl_context *ctx,
|
||||
* with the color pointer for each one.
|
||||
*/
|
||||
if (ctx->Light.ColorMaterialEnabled) {
|
||||
const GLuint bitmask = ctx->Light._ColorMaterialBitmask;
|
||||
for (i = 0 ; i < MAT_ATTRIB_MAX ; i++)
|
||||
if (bitmask & (1<<i))
|
||||
VB->AttribPtr[_TNL_ATTRIB_MAT_FRONT_AMBIENT + i] = VB->AttribPtr[_TNL_ATTRIB_COLOR0];
|
||||
GLbitfield bitmask = ctx->Light._ColorMaterialBitmask;
|
||||
while (bitmask) {
|
||||
const int i = u_bit_scan(&bitmask);
|
||||
VB->AttribPtr[_TNL_ATTRIB_MAT_FRONT_AMBIENT + i] =
|
||||
VB->AttribPtr[_TNL_ATTRIB_COLOR0];
|
||||
}
|
||||
}
|
||||
|
||||
/* Now, for each material attribute that's tracking vertex color, save
|
||||
|
||||
Reference in New Issue
Block a user