@@ -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", |
@@ -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 */ |
@@ -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; |
@@ -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 { |
@@ -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: | |||
{ |