mesa: Add a _BoundTextures field in gl_texture_unit
This will be used by glBindTextures() when unbinding textures, to avoid having to loop over all the targets. Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
6bf8ac846a
commit
4bd8272088
|
@ -1370,6 +1370,9 @@ struct gl_texture_unit
|
|||
|
||||
/** Points to highest priority, complete and enabled texture object */
|
||||
struct gl_texture_object *_Current;
|
||||
|
||||
/** Texture targets that have a non-default texture bound */
|
||||
GLbitfield _BoundTextures;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1102,6 +1102,7 @@ unbind_texobj_from_texunits(struct gl_context *ctx,
|
|||
_mesa_reference_texobj(&unit->CurrentTex[tex],
|
||||
ctx->Shared->DefaultTex[tex]);
|
||||
ASSERT(unit->CurrentTex[tex]);
|
||||
unit->_BoundTextures &= ~(1 << tex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1359,6 +1360,11 @@ _mesa_BindTexture( GLenum target, GLuint texName )
|
|||
ctx->Texture.CurrentUnit + 1);
|
||||
ASSERT(texUnit->CurrentTex[targetIndex]);
|
||||
|
||||
if (texName != 0)
|
||||
texUnit->_BoundTextures |= (1 << targetIndex);
|
||||
else
|
||||
texUnit->_BoundTextures &= ~(1 << targetIndex);
|
||||
|
||||
/* Pass BindTexture call to device driver */
|
||||
if (ctx->Driver.BindTexture)
|
||||
ctx->Driver.BindTexture(ctx, target, newTexObj);
|
||||
|
|
|
@ -113,6 +113,7 @@ _mesa_copy_texture_state( const struct gl_context *src, struct gl_context *dst )
|
|||
MAX2(dst->Texture.NumCurrentTexUsed, u + 1);
|
||||
}
|
||||
}
|
||||
dst->Texture.Unit[u]._BoundTextures = src->Texture.Unit[u]._BoundTextures;
|
||||
_mesa_unlock_context_textures(dst);
|
||||
}
|
||||
}
|
||||
|
@ -877,6 +878,8 @@ init_texture_unit( struct gl_context *ctx, GLuint unit )
|
|||
_mesa_reference_texobj(&texUnit->CurrentTex[tex],
|
||||
ctx->Shared->DefaultTex[tex]);
|
||||
}
|
||||
|
||||
texUnit->_BoundTextures = 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue