+
+ struct Texture2D {
+ GLint internal_format;
+ GLsizei width, height;
+ };
+
+ // A mapping from texture number to format details. This is filled if the
+ // texture is given out to a client or on the freelist, but not if it is
+ // deleted from the freelist.
+ std::map<GLuint, Texture2D> texture_formats;
+
+ // A list of all textures that are release but not freed (most recently freed
+ // first), and an estimate of their current memory usage. Once
+ // <texture_freelist_bytes> goes above <texture_freelist_max_bytes>,
+ // elements are deleted off the end of the list until we are under the limit
+ // again.
+ std::list<GLuint> texture_freelist;
+ size_t texture_freelist_bytes;
+
+ // See the caveats at the constructor.
+ static size_t estimate_texture_size(const Texture2D &texture_format);