* glTexParameter-related functions
*/
-
+#include <stdbool.h>
#include "main/glheader.h"
#include "main/colormac.h"
#include "main/context.h"
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;
}