#ifndef TextureManager_h
#define TextureManager_h
#include "GraphicsContext3D.h"
#include "IntRect.h"
#include "IntSize.h"
#include <wtf/FastAllocBase.h>
#include <wtf/HashMap.h>
#include <wtf/ListHashSet.h>
namespace WebCore {
typedef int TextureToken;
class TextureManager {
WTF_MAKE_NONCOPYABLE(TextureManager);
public:
static PassOwnPtr<TextureManager> create(GraphicsContext3D* context, size_t memoryLimitBytes, int maxTextureSize)
{
return adoptPtr(new TextureManager(context, memoryLimitBytes, maxTextureSize));
}
TextureToken getToken();
void releaseToken(TextureToken);
bool hasTexture(TextureToken);
unsigned requestTexture(TextureToken, IntSize, unsigned textureFormat, bool* newTexture = 0);
void protectTexture(TextureToken);
void unprotectAllTextures();
bool isProtected(TextureToken);
private:
TextureManager(GraphicsContext3D*, size_t memoryLimitBytes, int maxTextureSize);
struct TextureInfo {
IntSize size;
unsigned format;
unsigned textureId;
bool isProtected;
};
bool reduceMemoryToLimit(size_t);
void addTexture(TextureToken, TextureInfo);
void removeTexture(TextureToken, TextureInfo);
RefPtr<GraphicsContext3D> m_context;
typedef HashMap<TextureToken, TextureInfo> TextureMap;
TextureMap m_textures;
ListHashSet<TextureToken> m_textureLRUSet;
size_t m_memoryLimitBytes;
size_t m_memoryUseBytes;
int m_maxTextureSize;
TextureToken m_nextToken;
};
}
#endif