[Mesa-dev] [PATCH 3/7] mesa: implement glBindTextures()

Marek Olšák maraeo at gmail.com
Fri Jan 3 05:06:54 PST 2014


On Fri, Jan 3, 2014 at 2:04 PM, Marek Olšák <maraeo at gmail.com> wrote:
> On Fri, Jan 3, 2014 at 1:27 AM, Maxence Le Doré
> <maxence.ledore at gmail.com> wrote:
>> ---
>>  src/mesa/main/texobj.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
>>  src/mesa/main/texobj.h |  3 +++
>>  2 files changed, 55 insertions(+)
>>
>> diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
>> index bddbc50..66e2fb0 100644
>> --- a/src/mesa/main/texobj.c
>> +++ b/src/mesa/main/texobj.c
>> @@ -1686,4 +1686,56 @@ _mesa_InvalidateTexImage(GLuint texture, GLint level)
>>     return;
>>  }
>>
>> +/** ARB_multi_bind / OpenGL 4.4 */
>> +
>> +void GLAPIENTRY
>> +_mesa_BindTextures(GLuint first, GLsizei count, const GLuint *textures)
>> +{
>> +   GET_CURRENT_CONTEXT(ctx);
>> +   struct GLuint currentTexUnit = 0;
>> +   int i = 0;
>> +
>> +   currentTexUnit = ctx->Texture.CurrentUnit;
>> +
>> +   if(first + count > ctx->Const.MaxCombinedTextureImageUnits) {
>> +      _mesa_error(ctx, GL_INVALID_OPERATION, "glBindTextures(first+count)");
>> +      return;
>> +   }
>> +
>> +   for(i = 0 ; i < count ; i++) {
>> +      GLuint texture;
>> +      struct gl_texture_object *texObj;
>> +      GLenum texTarget;
>> +      int j = 0;
>> +
>> +      if(textures == NULL)
>> +        texture = 0;
>> +      else
>> +        texture = textures[i];
>> +
>> +      _mesa_ActiveTexture(GL_TEXTURE0 + first + i);
>> +      if(texture != 0) {
>> +        texObj = _mesa_lookup_texture(ctx, texture);
>> +        if(texObj) {
>> +          texTarget = texObj->Target;
>> +          _mesa_BindTexture(texTarget, texture);
>> +        }
>> +        else
>> +          _mesa_error(ctx, GL_INVALID_OPERATION,
>> +                      "glBindTextures(textures[%i])", i);
>
> This error is set too late. It should be done before changing textures.

Note that you make the same mistake in the other patches too. Also
please double-check that none of the _mesa_ functions generate errors.

Marek


More information about the mesa-dev mailing list