summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mapi/glapi/gen/gl_API.xml2
-rw-r--r--src/mesa/main/texstate.c36
-rw-r--r--src/mesa/main/texstate.h3
3 files changed, 29 insertions, 12 deletions
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index 630d6b8a5bb..8f93318b95d 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -4268,7 +4268,7 @@
<enum name="DOT3_RGB" value="0x86AE"/>
<enum name="DOT3_RGBA" value="0x86AF"/>
- <function name="ActiveTexture" es1="1.0" es2="2.0">
+ <function name="ActiveTexture" es1="1.0" es2="2.0" no_error="true">
<param name="texture" type="GLenum"/>
<glx rop="197"/>
</function>
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 1aac3cdbd8b..1949ec2a849 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -279,14 +279,12 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state,
}
-
-
/* GL_ARB_multitexture */
-void GLAPIENTRY
-_mesa_ActiveTexture(GLenum texture)
+static ALWAYS_INLINE void
+active_texture(GLenum texture, bool no_error)
{
const GLuint texUnit = texture - GL_TEXTURE0;
- GLuint k;
+
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
@@ -296,14 +294,16 @@ _mesa_ActiveTexture(GLenum texture)
if (ctx->Texture.CurrentUnit == texUnit)
return;
- k = _mesa_max_tex_unit(ctx);
+ if (!no_error) {
+ GLuint k = _mesa_max_tex_unit(ctx);
- assert(k <= ARRAY_SIZE(ctx->Texture.Unit));
+ assert(k <= ARRAY_SIZE(ctx->Texture.Unit));
- if (texUnit >= k) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glActiveTexture(texture=%s)",
- _mesa_enum_to_string(texture));
- return;
+ if (texUnit >= k) {
+ _mesa_error(ctx, GL_INVALID_ENUM, "glActiveTexture(texture=%s)",
+ _mesa_enum_to_string(texture));
+ return;
+ }
}
FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE);
@@ -316,6 +316,20 @@ _mesa_ActiveTexture(GLenum texture)
}
+void GLAPIENTRY
+_mesa_ActiveTexture_no_error(GLenum texture)
+{
+ active_texture(texture, true);
+}
+
+
+void GLAPIENTRY
+_mesa_ActiveTexture(GLenum texture)
+{
+ active_texture(texture, false);
+}
+
+
/* GL_ARB_multitexture */
void GLAPIENTRY
_mesa_ClientActiveTexture(GLenum texture)
diff --git a/src/mesa/main/texstate.h b/src/mesa/main/texstate.h
index cb329b07bfb..7c74329a64e 100644
--- a/src/mesa/main/texstate.h
+++ b/src/mesa/main/texstate.h
@@ -78,6 +78,9 @@ _mesa_print_texunit_state( struct gl_context *ctx, GLuint unit );
/*@{*/
extern void GLAPIENTRY
+_mesa_ActiveTexture_no_error( GLenum target );
+
+extern void GLAPIENTRY
_mesa_ActiveTexture( GLenum target );
extern void GLAPIENTRY