diff options
-rw-r--r-- | src/mesa/main/texparam.c | 77 |
1 files changed, 42 insertions, 35 deletions
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index 41b9f97bf0f..a0c508caa3a 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -29,7 +29,7 @@ * glTexParameter-related functions */ - +#include <stdbool.h> #include "main/glheader.h" #include "main/colormac.h" #include "main/context.h" @@ -56,43 +56,50 @@ static GLboolean validate_texture_wrap_mode(struct gl_context * ctx, GLenum target, GLenum wrap) { const struct gl_extensions * const e = & ctx->Extensions; + bool supported; - if (target == GL_TEXTURE_RECTANGLE_NV) { - if (wrap == GL_CLAMP || wrap == GL_CLAMP_TO_EDGE || - (wrap == GL_CLAMP_TO_BORDER && e->ARB_texture_border_clamp)) - return GL_TRUE; - } - else if (target == GL_TEXTURE_EXTERNAL_OES) { - if (wrap == GL_CLAMP_TO_EDGE) - return GL_TRUE; - } - else { - switch (wrap) { - case GL_CLAMP: - case GL_REPEAT: - case GL_CLAMP_TO_EDGE: - case GL_MIRRORED_REPEAT: - return GL_TRUE; - case GL_CLAMP_TO_BORDER: - if (e->ARB_texture_border_clamp) - return GL_TRUE; - break; - case GL_MIRROR_CLAMP_EXT: - case GL_MIRROR_CLAMP_TO_EDGE_EXT: - if (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp) - return GL_TRUE; - break; - case GL_MIRROR_CLAMP_TO_BORDER_EXT: - if (e->EXT_texture_mirror_clamp) - return GL_TRUE; - break; - default: - break; - } + switch (wrap) { + case GL_CLAMP: + supported = (target != GL_TEXTURE_EXTERNAL_OES); + break; + + case GL_CLAMP_TO_EDGE: + supported = true; + break; + + case GL_CLAMP_TO_BORDER: + supported = e->ARB_texture_border_clamp + && (target != GL_TEXTURE_EXTERNAL_OES); + break; + + case GL_REPEAT: + case GL_MIRRORED_REPEAT: + supported = (target != GL_TEXTURE_RECTANGLE_NV) + && (target != GL_TEXTURE_EXTERNAL_OES); + break; + + case GL_MIRROR_CLAMP_EXT: + case GL_MIRROR_CLAMP_TO_EDGE_EXT: + supported = (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp) + && (target != GL_TEXTURE_RECTANGLE_NV) + && (target != GL_TEXTURE_EXTERNAL_OES); + break; + + case GL_MIRROR_CLAMP_TO_BORDER_EXT: + supported = e->EXT_texture_mirror_clamp + && (target != GL_TEXTURE_RECTANGLE_NV) + && (target != GL_TEXTURE_EXTERNAL_OES); + break; + + default: + supported = false; + break; } - _mesa_error( ctx, GL_INVALID_ENUM, "glTexParameter(param=0x%x)", wrap ); - return GL_FALSE; + if (!supported) + _mesa_error( ctx, GL_INVALID_ENUM, "glTexParameter(param=0x%x)", wrap ); + + return supported; } |