diff options
author | Ian Romanick <[email protected]> | 2012-07-27 15:57:09 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2012-08-29 15:09:35 -0700 |
commit | 8df3f9bd5f7626a4548e9901c0b7af33a21af8a6 (patch) | |
tree | 81092633783eba82550e6a0273af7e2591952c3c /src/mesa/main | |
parent | 9555d7bdc1cec4cf08be85a2d1e9095de8dd3771 (diff) |
mesa/es: Validate glGetMaterial pname in Mesa code rather than the ES wrapper
Fixes a bug that glGetMaterial[fx]v in ES1 contexts would (try to) allow
queries of GL_AMBIENT_AND_DIFFUSE. This enum can only be used in glMaterial,
not in the get.
Signed-off-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/APIspec.xml | 20 | ||||
-rw-r--r-- | src/mesa/main/es1_conversion.c | 1 | ||||
-rw-r--r-- | src/mesa/main/light.c | 6 |
3 files changed, 6 insertions, 21 deletions
diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml index 6d6462ca49b..e7777a7cbcf 100644 --- a/src/mesa/main/APIspec.xml +++ b/src/mesa/main/APIspec.xml @@ -612,26 +612,6 @@ <param name="param" type="GLtype"/> </vector> </proto> - - <desc name="face"> - <value name="GL_FRONT"/> - <value name="GL_BACK"/> - </desc> - - <desc name="pname"> - <value name="GL_SHININESS"/> - <desc name="params" vector_size="1"/> - </desc> - - <desc name="pname"> - <value name="GL_AMBIENT"/> - <value name="GL_DIFFUSE"/> - <value name="GL_AMBIENT_AND_DIFFUSE"/> - <value name="GL_SPECULAR"/> - <value name="GL_EMISSION"/> - - <desc name="params" vector_size="4"/> - </desc> </template> <template name="GetString" direction="get"> diff --git a/src/mesa/main/es1_conversion.c b/src/mesa/main/es1_conversion.c index c1d7b83306c..c1bcfbe1f57 100644 --- a/src/mesa/main/es1_conversion.c +++ b/src/mesa/main/es1_conversion.c @@ -293,7 +293,6 @@ _es_GetMaterialxv(GLenum face, GLenum pname, GLfixed *params) break; case GL_AMBIENT: case GL_DIFFUSE: - case GL_AMBIENT_AND_DIFFUSE: case GL_SPECULAR: case GL_EMISSION: n_params = 4; diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c index d6fbcd9be2c..a6039353e66 100644 --- a/src/mesa/main/light.c +++ b/src/mesa/main/light.c @@ -789,6 +789,10 @@ _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params ) *params = mat[MAT_ATTRIB_SHININESS(f)][0]; break; case GL_COLOR_INDEXES: + if (ctx->API != API_OPENGL) { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetMaterialfv(pname)" ); + return; + } params[0] = mat[MAT_ATTRIB_INDEXES(f)][0]; params[1] = mat[MAT_ATTRIB_INDEXES(f)][1]; params[2] = mat[MAT_ATTRIB_INDEXES(f)][2]; @@ -807,6 +811,8 @@ _mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params ) GLfloat (*mat)[4] = ctx->Light.Material.Attrib; ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* update materials */ + ASSERT(ctx->API == API_OPENGL); + FLUSH_CURRENT(ctx, 0); /* update ctx->Light.Material from vertex buffer */ if (face==GL_FRONT) { |