In _mesa_TexEnvfv, do not accept values for GL_OPERAND2_ALPHA and GL_OPERAND2_RGB...
authorRoland Scheidegger <rscheidegger@gmx.ch>
Mon, 15 Aug 2005 18:24:12 +0000 (18:24 +0000)
committerRoland Scheidegger <rscheidegger@gmx.ch>
Mon, 15 Aug 2005 18:24:12 +0000 (18:24 +0000)
src/mesa/main/texstate.c

index a425de42168148cf48efbee261355494c0bd7943..1fe11425b496fae9f6afc6871dba8cf0a030ed3c 100644 (file)
@@ -544,8 +544,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
         }
         break;
       case GL_OPERAND2_RGB:
-        if (ctx->Extensions.EXT_texture_env_combine ||
-             ctx->Extensions.ARB_texture_env_combine) {
+        if (ctx->Extensions.ARB_texture_env_combine) {
            const GLenum operand = (GLenum) (GLint) *param;
            if (texUnit->Combine.OperandRGB[2] == operand)
               return;
@@ -562,14 +561,24 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
               return;
            }
         }
+        else if (ctx->Extensions.EXT_texture_env_combine) {
+           const GLenum operand = (GLenum) (GLint) *param;
+           if (texUnit->Combine.OperandRGB[2] == operand)
+              return;
+           /* operand must be GL_SRC_ALPHA which is the initial value - thus
+              don't need to actually compare the operand to the possible value */
+           else {
+               TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", operand);
+              return;
+           }
+        }
         else {
             TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
            return;
         }
         break;
       case GL_OPERAND2_ALPHA:
-        if (ctx->Extensions.EXT_texture_env_combine ||
-             ctx->Extensions.ARB_texture_env_combine) {
+        if (ctx->Extensions.ARB_texture_env_combine) {
            const GLenum operand = (GLenum) (GLint) *param;
            if (texUnit->Combine.OperandA[2] == operand)
               return;
@@ -584,6 +593,17 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
               return;
            }
         }
+        else if (ctx->Extensions.EXT_texture_env_combine) {
+           const GLenum operand = (GLenum) (GLint) *param;
+           if (texUnit->Combine.OperandA[2] == operand)
+              return;
+           /* operand must be GL_SRC_ALPHA which is the initial value - thus
+              don't need to actually compare the operand to the possible value */
+           else {
+               TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", operand);
+              return;
+           }
+        }
         else {
             TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
            return;