796
#define MAT( ATTR, N, face, params ) \
798
if (face != GL_BACK) \
799
MAT_ATTR( ATTR, N, params ); /* front */ \
800
if (face != GL_FRONT) \
801
MAT_ATTR( ATTR + 1, N, params ); /* back */ \
805
/* Colormaterial conflicts are dealt with later.
807
static void GLAPIENTRY
808
TAG(Materialfv)(GLenum face, GLenum pname,
809
const GLfloat * params)
811
GET_CURRENT_CONTEXT(ctx);
813
if (face != GL_FRONT && face != GL_BACK && face != GL_FRONT_AND_BACK) {
814
_mesa_error(ctx, GL_INVALID_ENUM, "glMaterial(invalid face)");
820
MAT(VBO_ATTRIB_MAT_FRONT_EMISSION, 4, face, params);
823
MAT(VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params);
826
MAT(VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params);
829
MAT(VBO_ATTRIB_MAT_FRONT_SPECULAR, 4, face, params);
832
if (*params < 0 || *params > ctx->Const.MaxShininess)
833
_mesa_error(ctx, GL_INVALID_VALUE,
834
"glMaterial(invalid shininess: %f out range [0, %f])",
835
*params, ctx->Const.MaxShininess);
837
MAT(VBO_ATTRIB_MAT_FRONT_SHININESS, 1, face, params);
839
case GL_COLOR_INDEXES:
840
MAT(VBO_ATTRIB_MAT_FRONT_INDEXES, 3, face, params);
842
case GL_AMBIENT_AND_DIFFUSE:
843
MAT(VBO_ATTRIB_MAT_FRONT_AMBIENT, 4, face, params);
844
MAT(VBO_ATTRIB_MAT_FRONT_DIFFUSE, 4, face, params);
847
ERROR(GL_INVALID_ENUM);
852
795
static void GLAPIENTRY
853
796
TAG(VertexP2ui)(GLenum type, GLuint value)