diff options
author | Yuanhan Liu <[email protected]> | 2011-10-21 11:27:25 +0800 |
---|---|---|
committer | Yuanhan Liu <[email protected]> | 2011-11-03 10:19:49 +0800 |
commit | 77cd3bf18d509dcbb2f121e4082027f4048ca623 (patch) | |
tree | 68580a7f7487b3760314c1fb657534eac225beef | |
parent | d9f05ac828986a2fcdca9fcae29d76f79847d8d3 (diff) |
mesa: complete the GL_TEXTURE_SWIZZLE* setup
The ARB_texture_swizzle spec says:
The error INVALID_OPERATION is generated if TexParameteri,
TexParameterf, TexParameteriv, or TexParameterfv, parameter <pname>
is TEXTURE_SWIZZLE_R, TEXTURE_SWIZZLE_G, TEXTURE_SWIZZLE_B,
or TEXTURE_SWIZZLE_A, and <param> is not RED, GREEN, BLUE, ALPHA,
ZERO, or ONE.
The error INVALID_OPERATION is generated if TexParameteriv, or
TexParameterfv, parameter <pname> TEXTURE_SWIZZLE_RGBA, and the four
consecutive values pointed to by <param> are not all RED, GREEN, BLUE,
ALPHA, ZERO, or ONE.
So, the GL_TEXTURE_SWIZZLE* pname is legal for glTexParameterf(v)
NOTE: this is a candidate for the 7.11 branch
Signed-off-by: Yuanhan Liu <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
-rw-r--r-- | src/mesa/main/texparam.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index 6da730d6711..73e5cbec0e4 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -596,6 +596,17 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param) need_update = set_tex_parameteri(ctx, texObj, pname, p); } break; + case GL_TEXTURE_SWIZZLE_R_EXT: + case GL_TEXTURE_SWIZZLE_G_EXT: + case GL_TEXTURE_SWIZZLE_B_EXT: + case GL_TEXTURE_SWIZZLE_A_EXT: + { + GLint p[4]; + p[0] = (GLint) param; + p[1] = p[2] = p[3] = 0; + need_update = set_tex_parameteri(ctx, texObj, pname, p); + } + break; default: { /* this will generate an error if pname is illegal */ @@ -661,6 +672,22 @@ _mesa_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params) break; #endif + case GL_TEXTURE_SWIZZLE_R_EXT: + case GL_TEXTURE_SWIZZLE_G_EXT: + case GL_TEXTURE_SWIZZLE_B_EXT: + case GL_TEXTURE_SWIZZLE_A_EXT: + case GL_TEXTURE_SWIZZLE_RGBA_EXT: + { + GLint p[4] = {0, 0, 0, 0}; + p[0] = (GLint) params[0]; + if (pname == GL_TEXTURE_SWIZZLE_RGBA_EXT) { + p[1] = (GLint) params[1]; + p[2] = (GLint) params[2]; + p[3] = (GLint) params[3]; + } + need_update = set_tex_parameteri(ctx, texObj, pname, p); + } + break; default: /* this will generate an error if pname is illegal */ need_update = set_tex_parameterf(ctx, texObj, pname, params); |