diff options
author | Pierre-Eric Pelloux-Prayer <[email protected]> | 2019-08-01 12:05:52 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2019-08-06 17:03:08 -0400 |
commit | 04b8e50bb89ed167fcaea0ac87c00ee0a09d9412 (patch) | |
tree | 708332e297dc0d7dfc24af077844bac454f2de16 | |
parent | 0e595326c4d728f17abc7c72f9a263965ff65da9 (diff) |
mesa: add _mesa_(get)texenvi(f)v_indexed helpers
They are exactly like _mesa_GetTexEnvfv/_mesa_GetTexEnviv except they take
a GLuint texunit parameter instead of relying of ctx->Texture.CurrentUnit.
Reviewed-by: Marek Olšák <[email protected]>
-rw-r--r-- | src/mesa/main/texenv.c | 77 |
1 files changed, 50 insertions, 27 deletions
diff --git a/src/mesa/main/texenv.c b/src/mesa/main/texenv.c index 95b44004c32..8274b0b88a8 100644 --- a/src/mesa/main/texenv.c +++ b/src/mesa/main/texenv.c @@ -391,24 +391,23 @@ set_combiner_scale(struct gl_context *ctx, } - -void GLAPIENTRY -_mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) +static void +_mesa_texenvfv_indexed( struct gl_context* ctx, GLuint texunit, GLenum target, + GLenum pname, const GLfloat *param ) { const GLint iparam0 = (GLint) param[0]; GLuint maxUnit; - GET_CURRENT_CONTEXT(ctx); maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV) ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxCombinedTextureImageUnits; - if (ctx->Texture.CurrentUnit >= maxUnit) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glTexEnvfv(current unit)"); + if (texunit >= maxUnit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexEnvfv(texunit=%d)", texunit); return; } if (target == GL_TEXTURE_ENV) { struct gl_fixedfunc_texture_unit *texUnit = - _mesa_get_fixedfunc_tex_unit(ctx, ctx->Texture.CurrentUnit); + _mesa_get_fixedfunc_tex_unit(ctx, texunit); /* The GL spec says that we should report an error if the unit is greater * than GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, but in practice, only @@ -465,7 +464,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) } else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) { struct gl_texture_unit *texUnit = - _mesa_get_current_tex_unit(ctx); + _mesa_get_tex_unit(ctx, texunit); if (pname == GL_TEXTURE_LOD_BIAS_EXT) { if (texUnit->LodBias == param[0]) @@ -490,13 +489,13 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) * but that's what the spec calls for. */ if (iparam0 == GL_TRUE) { - if (ctx->Point.CoordReplace & (1u << ctx->Texture.CurrentUnit)) + if (ctx->Point.CoordReplace & (1u << texunit)) return; - ctx->Point.CoordReplace |= (1u << ctx->Texture.CurrentUnit); + ctx->Point.CoordReplace |= (1u << texunit); } else if (iparam0 == GL_FALSE) { - if (~(ctx->Point.CoordReplace) & (1u << ctx->Texture.CurrentUnit)) + if (~(ctx->Point.CoordReplace) & (1u << texunit)) return; - ctx->Point.CoordReplace &= ~(1u << ctx->Texture.CurrentUnit); + ctx->Point.CoordReplace &= ~(1u << texunit); } else { _mesa_error( ctx, GL_INVALID_VALUE, "glTexEnv(param=0x%x)", iparam0); return; @@ -529,6 +528,14 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) void GLAPIENTRY +_mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) +{ + GET_CURRENT_CONTEXT(ctx); + _mesa_texenvfv_indexed(ctx, ctx->Texture.CurrentUnit, target, pname, param); +} + + +void GLAPIENTRY _mesa_TexEnvf( GLenum target, GLenum pname, GLfloat param ) { GLfloat p[4]; @@ -654,23 +661,22 @@ get_texenvi(struct gl_context *ctx, } - -void GLAPIENTRY -_mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) +static void +_mesa_gettexenvfv_indexed( GLuint texunit, GLenum target, GLenum pname, GLfloat *params ) { GLuint maxUnit; GET_CURRENT_CONTEXT(ctx); maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV) ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxCombinedTextureImageUnits; - if (ctx->Texture.CurrentUnit >= maxUnit) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnvfv(current unit)"); + if (texunit >= maxUnit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnvfv(texunit=%d)", texunit); return; } if (target == GL_TEXTURE_ENV) { struct gl_fixedfunc_texture_unit *texUnit = - _mesa_get_fixedfunc_tex_unit(ctx, ctx->Texture.CurrentUnit); + _mesa_get_fixedfunc_tex_unit(ctx, texunit); /* The GL spec says that we should report an error if the unit is greater * than GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, but in practice, only @@ -697,7 +703,7 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) } } else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) { - const struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); + const struct gl_texture_unit *texUnit = _mesa_get_tex_unit(ctx, texunit); if (pname == GL_TEXTURE_LOD_BIAS_EXT) { *params = texUnit->LodBias; @@ -715,7 +721,7 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) return; } if (pname == GL_COORD_REPLACE_NV) { - if (ctx->Point.CoordReplace & (1u << ctx->Texture.CurrentUnit)) + if (ctx->Point.CoordReplace & (1u << texunit)) *params = 1.0f; else *params = 0.0f; @@ -732,22 +738,24 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) } -void GLAPIENTRY -_mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) +static void +_mesa_gettexenviv_indexed( GLuint texunit, GLenum target, + GLenum pname, GLint *params ) { GLuint maxUnit; GET_CURRENT_CONTEXT(ctx); maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV) ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxCombinedTextureImageUnits; - if (ctx->Texture.CurrentUnit >= maxUnit) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnviv(current unit)"); + if (texunit >= maxUnit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnviv(texunit=%d)", + texunit); return; } if (target == GL_TEXTURE_ENV) { struct gl_fixedfunc_texture_unit *texUnit = - _mesa_get_fixedfunc_tex_unit(ctx, ctx->Texture.CurrentUnit); + _mesa_get_fixedfunc_tex_unit(ctx, texunit); /* The GL spec says that we should report an error if the unit is greater * than GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, but in practice, only @@ -772,7 +780,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) } } else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) { - const struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); + const struct gl_texture_unit *texUnit = _mesa_get_tex_unit(ctx, texunit); if (pname == GL_TEXTURE_LOD_BIAS_EXT) { *params = (GLint) texUnit->LodBias; @@ -790,7 +798,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) return; } if (pname == GL_COORD_REPLACE_NV) { - if (ctx->Point.CoordReplace & (1u << ctx->Texture.CurrentUnit)) + if (ctx->Point.CoordReplace & (1u << texunit)) *params = GL_TRUE; else *params = GL_FALSE; @@ -806,3 +814,18 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) } } + +void GLAPIENTRY +_mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) +{ + GET_CURRENT_CONTEXT(ctx); + _mesa_gettexenvfv_indexed(ctx->Texture.CurrentUnit, target, pname, params); +} + + +void GLAPIENTRY +_mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) +{ + GET_CURRENT_CONTEXT(ctx); + _mesa_gettexenviv_indexed(ctx->Texture.CurrentUnit, target, pname, params); +} |