mesa: add polygon_mode() helper
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 27 Jul 2017 10:15:04 +0000 (12:15 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 2 Aug 2017 10:54:32 +0000 (12:54 +0200)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/mesa/main/polygon.c

index a924b849801cc36558b82562a972567e3efd53e3..98a9118fd2083ffec6922494adc00a150a35ce5e 100644 (file)
@@ -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.
  */