[Mesa-dev] [Mesa-dev RESEND 25/26] mesa: add polygon_mode() helper

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Aug 1 09:11:59 UTC 2017


Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/mesa/main/polygon.c | 47 ++++++++++++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/src/mesa/main/polygon.c b/src/mesa/main/polygon.c
index a924b84980..98a9118fd2 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.
  */
-- 
2.13.3



More information about the mesa-dev mailing list