diff options
-rw-r--r-- | src/mesa/main/polygon.c | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/src/mesa/main/polygon.c b/src/mesa/main/polygon.c index a924b849801..98a9118fd20 100644 --- a/src/mesa/main/polygon.c +++ b/src/mesa/main/polygon.c @@ -154,33 +154,33 @@ _mesa_FrontFace(GLenum mode) * gl_polygon_attrib::BackMode. On change flushes the vertices and notifies the * driver via the dd_function_table::PolygonMode callback. */ -void GLAPIENTRY -_mesa_PolygonMode( GLenum face, GLenum mode ) +static ALWAYS_INLINE void +polygon_mode(struct gl_context *ctx, GLenum face, GLenum mode, bool no_error) { - GET_CURRENT_CONTEXT(ctx); - - if (MESA_VERBOSE&VERBOSE_API) + if (MESA_VERBOSE & VERBOSE_API) _mesa_debug(ctx, "glPolygonMode %s %s\n", _mesa_enum_to_string(face), _mesa_enum_to_string(mode)); - switch (mode) { - case GL_POINT: - case GL_LINE: - case GL_FILL: - break; - case GL_FILL_RECTANGLE_NV: - if (ctx->Extensions.NV_fill_rectangle) + if (!no_error) { + switch (mode) { + case GL_POINT: + case GL_LINE: + case GL_FILL: break; - /* fall-through */ - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glPolygonMode(mode)"); - return; + case GL_FILL_RECTANGLE_NV: + if (ctx->Extensions.NV_fill_rectangle) + break; + /* fall-through */ + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glPolygonMode(mode)"); + return; + } } switch (face) { case GL_FRONT: - if (ctx->API == API_OPENGL_CORE) { + if (!no_error && ctx->API == API_OPENGL_CORE) { _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); return; } @@ -199,7 +199,7 @@ _mesa_PolygonMode( GLenum face, GLenum mode ) ctx->Polygon.BackMode = mode; break; case GL_BACK: - if (ctx->API == API_OPENGL_CORE) { + if (!no_error && ctx->API == API_OPENGL_CORE) { _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); return; } @@ -210,7 +210,8 @@ _mesa_PolygonMode( GLenum face, GLenum mode ) ctx->Polygon.BackMode = mode; break; default: - _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); + if (!no_error) + _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); return; } @@ -219,6 +220,14 @@ _mesa_PolygonMode( GLenum face, GLenum mode ) } +void GLAPIENTRY +_mesa_PolygonMode(GLenum face, GLenum mode) +{ + GET_CURRENT_CONTEXT(ctx); + polygon_mode(ctx, face, mode, false); +} + + /** * Called by glPolygonStipple. */ |