Fixed a number of minor GL_ARB_texture_env_combine/dot3 issues.
This commit is contained in:
parent
15eddf38fb
commit
bcfe3936a8
|
@ -1,4 +1,4 @@
|
|||
/* $Id: attrib.c,v 1.48 2001/04/11 23:22:20 brianp Exp $ */
|
||||
/* $Id: attrib.c,v 1.49 2001/04/17 21:25:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
@ -602,7 +602,8 @@ pop_texture_group(GLcontext *ctx, const struct gl_texture_attrib *texAttrib)
|
|||
_mesa_TexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT,
|
||||
GL_TEXTURE_LOD_BIAS_EXT, unit->LodBias);
|
||||
}
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
_mesa_TexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT,
|
||||
unit->CombineModeRGB);
|
||||
_mesa_TexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_EXT,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: enums.c,v 1.17 2001/04/16 21:07:33 brianp Exp $ */
|
||||
/* $Id: enums.c,v 1.18 2001/04/17 21:25:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
@ -833,6 +833,9 @@ enum_elt all_enums[] =
|
|||
{ "GL_PRIMARY_COLOR_EXT", 0x8577 },
|
||||
{ "GL_PREVIOUS_EXT", 0x8578 },
|
||||
|
||||
/* GL_ARB_texture_env_combine */
|
||||
{ "GL_SUBTRACT_ARB", 0x84E7 },
|
||||
|
||||
/* GL_EXT_texture_env_dot3 */
|
||||
{ "GL_DOT3_RGB_EXT", 0x8740 },
|
||||
{ "GL_DOT3_RGBA_EXT", 0x8741 },
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: extensions.c,v 1.56 2001/03/26 19:42:40 brianp Exp $ */
|
||||
/* $Id: extensions.c,v 1.57 2001/04/17 21:25:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
@ -62,8 +62,8 @@ static struct {
|
|||
{ OFF, "GL_ARB_texture_compression", F(ARB_texture_compression) },
|
||||
{ OFF, "GL_ARB_texture_cube_map", F(ARB_texture_cube_map) },
|
||||
{ OFF, "GL_ARB_texture_env_add", F(EXT_texture_env_add) },
|
||||
{ OFF, "GL_ARB_texture_env_combine", F(EXT_texture_env_combine) },
|
||||
{ OFF, "GL_ARB_texture_env_dot3", F(EXT_texture_env_dot3) },
|
||||
{ OFF, "GL_ARB_texture_env_combine", F(ARB_texture_env_combine) },
|
||||
{ OFF, "GL_ARB_texture_env_dot3", F(ARB_texture_env_dot3) },
|
||||
{ ON, "GL_ARB_tranpose_matrix", 0 },
|
||||
{ ON, "GL_EXT_abgr", 0 },
|
||||
{ ON, "GL_EXT_bgra", 0 },
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: mtypes.h,v 1.38 2001/03/29 21:16:25 keithw Exp $ */
|
||||
/* $Id: mtypes.h,v 1.39 2001/04/17 21:25:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
@ -1173,6 +1173,8 @@ struct gl_extensions {
|
|||
GLboolean ARB_texture_border_clamp;
|
||||
GLboolean ARB_texture_compression;
|
||||
GLboolean ARB_texture_cube_map;
|
||||
GLboolean ARB_texture_env_combine;
|
||||
GLboolean ARB_texture_env_dot3;
|
||||
GLboolean EXT_blend_color;
|
||||
GLboolean EXT_blend_func_separate;
|
||||
GLboolean EXT_blend_logic_op;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: texstate.c,v 1.43 2001/04/16 21:06:54 brianp Exp $ */
|
||||
/* $Id: texstate.c,v 1.44 2001/04/17 21:25:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
@ -68,6 +68,10 @@
|
|||
#define GL_CLAMP_TO_BORDER_ARB 0x812D
|
||||
#endif
|
||||
|
||||
#ifndef GL_SUBTRACT_ARB
|
||||
#define GL_SUBTRACT_ARB 0x84E7
|
||||
#endif
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* Texture Environment */
|
||||
|
@ -101,7 +105,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
}
|
||||
break;
|
||||
case GL_COMBINE_EXT:
|
||||
if (!ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (!ctx->Extensions.EXT_texture_env_combine &&
|
||||
!ctx->Extensions.ARB_texture_env_combine) {
|
||||
ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode);
|
||||
return;
|
||||
}
|
||||
|
@ -135,20 +140,33 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
break;
|
||||
}
|
||||
case GL_COMBINE_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
GLenum mode = (GLenum) (GLint) *param;
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
const GLenum mode = (GLenum) (GLint) *param;
|
||||
switch (mode) {
|
||||
case GL_REPLACE:
|
||||
case GL_MODULATE:
|
||||
case GL_ADD:
|
||||
case GL_ADD_SIGNED_EXT:
|
||||
case GL_INTERPOLATE_EXT:
|
||||
/* OK */
|
||||
break;
|
||||
case GL_SUBTRACT_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_env_combine) {
|
||||
ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case GL_DOT3_RGB_EXT:
|
||||
case GL_DOT3_RGBA_EXT:
|
||||
if (!ctx->Extensions.EXT_texture_env_dot3) {
|
||||
ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case GL_DOT3_RGB_ARB:
|
||||
case GL_DOT3_RGBA_ARB:
|
||||
if (!ctx->Extensions.EXT_texture_env_dot3) {
|
||||
if (!ctx->Extensions.ARB_texture_env_dot3) {
|
||||
ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode);
|
||||
return;
|
||||
}
|
||||
|
@ -168,23 +186,31 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
}
|
||||
break;
|
||||
case GL_COMBINE_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
GLenum mode = (GLenum) (GLint) *param;
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
const GLenum mode = (GLenum) (GLint) *param;
|
||||
switch (mode) {
|
||||
case GL_REPLACE:
|
||||
case GL_MODULATE:
|
||||
case GL_ADD:
|
||||
case GL_ADD_SIGNED_EXT:
|
||||
case GL_INTERPOLATE_EXT:
|
||||
if (texUnit->CombineModeA == mode)
|
||||
return;
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE);
|
||||
texUnit->CombineModeA = mode;
|
||||
/* OK */
|
||||
break;
|
||||
case GL_SUBTRACT_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_env_combine) {
|
||||
ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode);
|
||||
return;
|
||||
}
|
||||
if (texUnit->CombineModeA == mode)
|
||||
return;
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE);
|
||||
texUnit->CombineModeA = mode;
|
||||
}
|
||||
else {
|
||||
ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);
|
||||
|
@ -194,7 +220,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
case GL_SOURCE0_RGB_EXT:
|
||||
case GL_SOURCE1_RGB_EXT:
|
||||
case GL_SOURCE2_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLenum source = (GLenum) (GLint) *param;
|
||||
GLuint s = pname - GL_SOURCE0_RGB_EXT;
|
||||
switch (source) {
|
||||
|
@ -220,7 +247,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
case GL_SOURCE0_ALPHA_EXT:
|
||||
case GL_SOURCE1_ALPHA_EXT:
|
||||
case GL_SOURCE2_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLenum source = (GLenum) (GLint) *param;
|
||||
GLuint s = pname - GL_SOURCE0_ALPHA_EXT;
|
||||
switch (source) {
|
||||
|
@ -244,7 +272,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
break;
|
||||
case GL_OPERAND0_RGB_EXT:
|
||||
case GL_OPERAND1_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLenum operand = (GLenum) (GLint) *param;
|
||||
GLuint s = pname - GL_OPERAND0_RGB_EXT;
|
||||
switch (operand) {
|
||||
|
@ -269,7 +298,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
break;
|
||||
case GL_OPERAND0_ALPHA_EXT:
|
||||
case GL_OPERAND1_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLenum operand = (GLenum) (GLint) *param;
|
||||
switch (operand) {
|
||||
case GL_SRC_ALPHA:
|
||||
|
@ -291,7 +321,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND2_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLenum operand = (GLenum) (GLint) *param;
|
||||
switch (operand) {
|
||||
case GL_SRC_COLOR: /* ARB combine only */
|
||||
|
@ -313,7 +344,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND2_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLenum operand = (GLenum) (GLint) *param;
|
||||
switch (operand) {
|
||||
case GL_SRC_ALPHA:
|
||||
|
@ -334,7 +366,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
}
|
||||
break;
|
||||
case GL_RGB_SCALE_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLuint newshift;
|
||||
if (*param == 1.0) {
|
||||
newshift = 0;
|
||||
|
@ -361,7 +394,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
|
|||
}
|
||||
break;
|
||||
case GL_ALPHA_SCALE:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
GLuint newshift;
|
||||
if (*param == 1.0) {
|
||||
newshift = 0;
|
||||
|
@ -478,7 +512,8 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
|
|||
COPY_4FV( params, texUnit->EnvColor );
|
||||
break;
|
||||
case GL_RGB_SCALE_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
if (texUnit->CombineScaleShiftRGB == 0)
|
||||
*params = 1.0;
|
||||
else if (texUnit->CombineScaleShiftRGB == 1)
|
||||
|
@ -492,7 +527,8 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
|
|||
}
|
||||
break;
|
||||
case GL_ALPHA_SCALE:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
if (texUnit->CombineScaleShiftA == 0)
|
||||
*params = 1.0;
|
||||
else if (texUnit->CombineScaleShiftA == 1)
|
||||
|
@ -534,7 +570,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
params[3] = FLOAT_TO_INT( texUnit->EnvColor[3] );
|
||||
break;
|
||||
case GL_COMBINE_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineModeRGB;
|
||||
}
|
||||
else {
|
||||
|
@ -542,7 +579,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_COMBINE_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineModeA;
|
||||
}
|
||||
else {
|
||||
|
@ -550,7 +588,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_SOURCE0_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineSourceRGB[0];
|
||||
}
|
||||
else {
|
||||
|
@ -558,7 +597,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_SOURCE1_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineSourceRGB[1];
|
||||
}
|
||||
else {
|
||||
|
@ -566,7 +606,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_SOURCE2_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineSourceRGB[2];
|
||||
}
|
||||
else {
|
||||
|
@ -574,7 +615,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_SOURCE0_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineSourceA[0];
|
||||
}
|
||||
else {
|
||||
|
@ -582,7 +624,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_SOURCE1_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineSourceA[1];
|
||||
}
|
||||
else {
|
||||
|
@ -590,7 +633,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_SOURCE2_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineSourceA[2];
|
||||
}
|
||||
else {
|
||||
|
@ -598,7 +642,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND0_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineOperandRGB[0];
|
||||
}
|
||||
else {
|
||||
|
@ -606,7 +651,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND1_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineOperandRGB[1];
|
||||
}
|
||||
else {
|
||||
|
@ -614,7 +660,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND2_RGB_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineOperandRGB[2];
|
||||
}
|
||||
else {
|
||||
|
@ -622,7 +669,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND0_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineOperandA[0];
|
||||
}
|
||||
else {
|
||||
|
@ -630,7 +678,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND1_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineOperandA[1];
|
||||
}
|
||||
else {
|
||||
|
@ -638,7 +687,8 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
|
|||
}
|
||||
break;
|
||||
case GL_OPERAND2_ALPHA_EXT:
|
||||
if (ctx->Extensions.EXT_texture_env_combine) {
|
||||
if (ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine) {
|
||||
*params = (GLint) texUnit->CombineOperandA[2];
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: s_texture.c,v 1.23 2001/04/12 15:18:07 brianp Exp $ */
|
||||
/* $Id: s_texture.c,v 1.24 2001/04/17 21:25:53 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
@ -52,6 +52,10 @@
|
|||
#define GL_CLAMP_TO_BORDER_ARB 0x812D
|
||||
#endif
|
||||
|
||||
#ifndef GL_SUBTRACT_ARB
|
||||
#define GL_SUBTRACT_ARB 0x84E7
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* These values are used in the fixed-point arithmetic used
|
||||
|
@ -1763,7 +1767,8 @@ texture_combine(const GLcontext *ctx,
|
|||
const GLuint RGBshift = textureUnit->CombineScaleShiftRGB;
|
||||
const GLuint Ashift = textureUnit->CombineScaleShiftA;
|
||||
|
||||
ASSERT(ctx->Extensions.EXT_texture_env_combine);
|
||||
ASSERT(ctx->Extensions.EXT_texture_env_combine ||
|
||||
ctx->Extensions.ARB_texture_env_combine);
|
||||
|
||||
/*
|
||||
* Do operand setup for up to 3 operands. Loop over the terms.
|
||||
|
@ -1968,6 +1973,20 @@ texture_combine(const GLcontext *ctx,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case GL_SUBTRACT_ARB:
|
||||
{
|
||||
const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0];
|
||||
const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1];
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint r = ((GLint) arg0[i][RCOMP] - (GLint) arg1[i][RCOMP]) << RGBshift;
|
||||
GLint g = ((GLint) arg0[i][GCOMP] - (GLint) arg1[i][GCOMP]) << RGBshift;
|
||||
GLint b = ((GLint) arg0[i][BCOMP] - (GLint) arg1[i][BCOMP]) << RGBshift;
|
||||
rgba[i][RCOMP] = (GLchan) CLAMP(r, 0, CHAN_MAX);
|
||||
rgba[i][GCOMP] = (GLchan) CLAMP(g, 0, CHAN_MAX);
|
||||
rgba[i][BCOMP] = (GLchan) CLAMP(b, 0, CHAN_MAX);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GL_DOT3_RGB_EXT:
|
||||
case GL_DOT3_RGBA_EXT:
|
||||
case GL_DOT3_RGB_ARB:
|
||||
|
@ -2059,6 +2078,17 @@ texture_combine(const GLcontext *ctx,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case GL_SUBTRACT_ARB:
|
||||
{
|
||||
const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0];
|
||||
const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1];
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint a = ((GLint) arg0[i][ACOMP] - (GLint) arg1[i][ACOMP]) << RGBshift;
|
||||
rgba[i][ACOMP] = (GLchan) CLAMP(a, 0, CHAN_MAX);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
_mesa_problem(NULL, "invalid combine mode");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue