From e11f089f821ea90754d8cbe56278eba4cf5665f4 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 17 Oct 2001 13:31:07 +0000 Subject: added GL_ARB_texture_mirrored_repeat --- src/mesa/main/extensions.c | 4 +++- src/mesa/main/glheader.h | 10 +++++++++- src/mesa/main/mtypes.h | 3 ++- src/mesa/main/texstate.c | 24 ++++++++++++------------ src/mesa/swrast/s_texture.c | 33 ++++++++++++++++++++++++++++++--- 5 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 7e96b9e1b5..8b7de99fd9 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -1,4 +1,4 @@ -/* $Id: extensions.c,v 1.64 2001/08/13 18:09:34 brianp Exp $ */ +/* $Id: extensions.c,v 1.65 2001/10/17 13:31:07 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -65,6 +65,7 @@ static struct { { OFF, "GL_ARB_texture_env_add", F(EXT_texture_env_add) }, { OFF, "GL_ARB_texture_env_combine", F(ARB_texture_env_combine) }, { OFF, "GL_ARB_texture_env_dot3", F(ARB_texture_env_dot3) }, + { OFF, "GL_ARB_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)}, { ON, "GL_ARB_transpose_matrix", 0 }, { ON, "GL_EXT_abgr", 0 }, { ON, "GL_EXT_bgra", 0 }, @@ -138,6 +139,7 @@ _mesa_enable_sw_extensions(GLcontext *ctx) "GL_ARB_texture_env_add", "GL_ARB_texture_env_combine", "GL_ARB_texture_env_dot3", + "GL_ARB_texture_mirrored_repeat", "GL_EXT_blend_color", "GL_EXT_blend_func_separate", "GL_EXT_blend_logic_op", diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h index 41c4742040..ed3f76ba6b 100644 --- a/src/mesa/main/glheader.h +++ b/src/mesa/main/glheader.h @@ -1,4 +1,4 @@ -/* $Id: glheader.h,v 1.22 2001/07/16 15:54:23 brianp Exp $ */ +/* $Id: glheader.h,v 1.23 2001/10/17 13:31:07 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -260,4 +260,12 @@ typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESC typedef union { GLfloat f; GLint i; } fi_type; +#ifndef GL_MIRRORED_REPEAT_ARB +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#endif + + #endif /* GLHEADER_H */ diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 9325934a07..c670e57413 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1,4 +1,4 @@ -/* $Id: mtypes.h,v 1.50 2001/07/28 19:28:49 keithw Exp $ */ +/* $Id: mtypes.h,v 1.51 2001/10/17 13:31:07 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -1202,6 +1202,7 @@ struct gl_extensions { GLboolean ARB_texture_cube_map; GLboolean ARB_texture_env_combine; GLboolean ARB_texture_env_dot3; + GLboolean ARB_texture_mirrored_repeat; GLboolean EXT_blend_color; GLboolean EXT_blend_func_separate; GLboolean EXT_blend_logic_op; diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c index 0205d30fdd..f2f0211606 100644 --- a/src/mesa/main/texstate.c +++ b/src/mesa/main/texstate.c @@ -1,4 +1,4 @@ -/* $Id: texstate.c,v 1.57 2001/09/18 23:06:14 kschultz Exp $ */ +/* $Id: texstate.c,v 1.58 2001/10/17 13:31:07 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -140,16 +140,10 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) return; } break; - case GL_DOT3_RGB_EXT: - case GL_DOT3_RGBA_EXT: - if (!ctx->Extensions.EXT_texture_env_dot3) { - TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode); - return; - } - break; case GL_DOT3_RGB_ARB: case GL_DOT3_RGBA_ARB: - if (!ctx->Extensions.ARB_texture_env_dot3) { + if (!ctx->Extensions.EXT_texture_env_dot3 && + !ctx->Extensions.ARB_texture_env_dot3) { TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode); return; } @@ -929,7 +923,9 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) eparam==GL_REPEAT || eparam==GL_CLAMP_TO_EDGE || (eparam == GL_CLAMP_TO_BORDER_ARB && - ctx->Extensions.ARB_texture_border_clamp)) { + ctx->Extensions.ARB_texture_border_clamp) || + (eparam == GL_MIRRORED_REPEAT_ARB && + ctx->Extensions.ARB_texture_mirrored_repeat)) { texObj->WrapS = eparam; } else { @@ -944,7 +940,9 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) eparam==GL_REPEAT || eparam==GL_CLAMP_TO_EDGE || (eparam == GL_CLAMP_TO_BORDER_ARB && - ctx->Extensions.ARB_texture_border_clamp)) { + ctx->Extensions.ARB_texture_border_clamp) || + (eparam == GL_MIRRORED_REPEAT_ARB && + ctx->Extensions.ARB_texture_mirrored_repeat)) { texObj->WrapT = eparam; } else { @@ -959,7 +957,9 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) eparam==GL_REPEAT || eparam==GL_CLAMP_TO_EDGE || (eparam == GL_CLAMP_TO_BORDER_ARB && - ctx->Extensions.ARB_texture_border_clamp)) { + ctx->Extensions.ARB_texture_border_clamp) || + (eparam == GL_MIRRORED_REPEAT_ARB && + ctx->Extensions.ARB_texture_mirrored_repeat)) { texObj->WrapR = eparam; } else { diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c index 39d9a9c612..fcbbe73a7a 100644 --- a/src/mesa/swrast/s_texture.c +++ b/src/mesa/swrast/s_texture.c @@ -1,4 +1,4 @@ -/* $Id: s_texture.c,v 1.39 2001/09/19 20:30:44 kschultz Exp $ */ +/* $Id: s_texture.c,v 1.40 2001/10/17 13:31:07 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -92,6 +92,19 @@ I0 = IFLOOR(U); \ I1 = I0 + 1; \ } \ + else if (wrapMode == GL_MIRRORED_REPEAT_ARB) { \ + const GLint flr = IFLOOR(S); \ + if (flr & 1) \ + U = 1.0 - (S - (GLfloat) flr); /* flr is odd */ \ + else \ + U = S - (GLfloat) flr; /* flr is even */ \ + I0 = IFLOOR(U); \ + I1 = I0 + 1; \ + if (I0 < 0) \ + I0 = 0; \ + if (I1 >= (GLint) SIZE) \ + I1 = SIZE - 1; \ + } \ else { \ ASSERT(wrapMode == GL_CLAMP); \ if (S <= 0.0F) \ @@ -142,6 +155,22 @@ else \ I = IFLOOR(S * SIZE); \ } \ + else if (wrapMode == GL_MIRRORED_REPEAT_ARB) { \ + const GLfloat min = 1.0F / (2.0F * SIZE); \ + const GLfloat max = 1.0F - min; \ + const GLint flr = IFLOOR(S); \ + GLfloat u; \ + if (flr & 1) \ + u = 1.0 - (S - (GLfloat) flr); /* flr is odd */ \ + else \ + u = S - (GLfloat) flr; /* flr is even */ \ + if (u < min) \ + I = 0; \ + else if (u > max) \ + I = SIZE - 1; \ + else \ + I = IFLOOR(u * SIZE); \ + } \ else { \ ASSERT(wrapMode == GL_CLAMP); \ /* s limited to [0,1] */ \ @@ -2133,8 +2162,6 @@ texture_combine(const GLcontext *ctx, } } break; - case GL_DOT3_RGB_EXT: - case GL_DOT3_RGBA_EXT: case GL_DOT3_RGB_ARB: case GL_DOT3_RGBA_ARB: { -- cgit v1.2.3