mesa: Refactor parameter processing in set_combiner_(operand|source)
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 8 Sep 2010 17:46:10 +0000 (10:46 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 8 Sep 2010 23:26:15 +0000 (16:26 -0700)
The enum values were chosen to have sequential values for a reason.
Use that to compact and simplify the code.

src/mesa/main/texenv.c

index 9b9c4b1ccd58c020d1c820d6b5781c1a5b112df3..3a55128c73634df58873ff31f25730f619e3952f 100644 (file)
@@ -196,57 +196,34 @@ set_combiner_source(GLcontext *ctx,
 
    /*
     * Translate pname to (term, alpha).
+    *
+    * The enums were given sequential values for a reason.
     */
    switch (pname) {
    case GL_SOURCE0_RGB:
-      term = 0;
-      alpha = GL_FALSE;
-      break;
    case GL_SOURCE1_RGB:
-      term = 1;
-      alpha = GL_FALSE;
-      break;
    case GL_SOURCE2_RGB:
-      term = 2;
-      alpha = GL_FALSE;
-      break;
    case GL_SOURCE3_RGB_NV:
-      if (ctx->Extensions.NV_texture_env_combine4) {
-         term = 3;
-         alpha = GL_FALSE;
-      }
-      else {
-         TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
-         return;
-      }
+      term = pname - GL_SOURCE0_RGB;
+      alpha = GL_FALSE;
       break;
    case GL_SOURCE0_ALPHA:
-      term = 0;
-      alpha = GL_TRUE;
-      break;
    case GL_SOURCE1_ALPHA:
-      term = 1;
-      alpha = GL_TRUE;
-      break;
    case GL_SOURCE2_ALPHA:
-      term = 2;
-      alpha = GL_TRUE;
-      break;
    case GL_SOURCE3_ALPHA_NV:
-      if (ctx->Extensions.NV_texture_env_combine4) {
-         term = 3;
-         alpha = GL_TRUE;
-      }
-      else {
-         TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
-         return;
-      }
+      term = pname - GL_SOURCE0_ALPHA;
+      alpha = GL_TRUE;
       break;
    default:
       TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
       return;
    }
 
+   if ((term == 3) && !ctx->Extensions.NV_texture_env_combine4) {
+      TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
+      return;
+   }
+
    assert(term < MAX_COMBINER_TERMS);
 
    /*
@@ -310,56 +287,33 @@ set_combiner_operand(GLcontext *ctx,
       return;
    }
 
+   /* The enums were given sequential values for a reason.
+    */
    switch (pname) {
    case GL_OPERAND0_RGB:
-      term = 0;
-      alpha = GL_FALSE;
-      break;
    case GL_OPERAND1_RGB:
-      term = 1;
-      alpha = GL_FALSE;
-      break;
    case GL_OPERAND2_RGB:
-      term = 2;
-      alpha = GL_FALSE;
-      break;
    case GL_OPERAND3_RGB_NV:
-      if (ctx->Extensions.NV_texture_env_combine4) {
-         term = 3;
-         alpha = GL_FALSE;
-      }
-      else {
-         TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
-         return;
-      }
+      term = pname - GL_OPERAND0_RGB;
+      alpha = GL_FALSE;
       break;
    case GL_OPERAND0_ALPHA:
-      term = 0;
-      alpha = GL_TRUE;
-      break;
    case GL_OPERAND1_ALPHA:
-      term = 1;
-      alpha = GL_TRUE;
-      break;
    case GL_OPERAND2_ALPHA:
-      term = 2;
-      alpha = GL_TRUE;
-      break;
    case GL_OPERAND3_ALPHA_NV:
-      if (ctx->Extensions.NV_texture_env_combine4) {
-         term = 3;
-         alpha = GL_TRUE;
-      }
-      else {
-         TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
-         return;
-      }
+      term = pname - GL_OPERAND0_ALPHA;
+      alpha = GL_TRUE;
       break;
    default:
       TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
       return;
    }
 
+   if ((term == 3) && !ctx->Extensions.NV_texture_env_combine4) {
+      TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
+      return;
+   }
+
    assert(term < MAX_COMBINER_TERMS);
 
    /*