// // Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ResourceManager.h : Defines the ResourceManager class, which tracks objects // shared by multiple GL contexts. #ifndef LIBANGLE_RESOURCEMANAGER_H_ #define LIBANGLE_RESOURCEMANAGER_H_ #include "angle_gl.h" #include "common/angleutils.h" #include "libANGLE/angletypes.h" #include "libANGLE/HandleAllocator.h" #include namespace rx { class ImplFactory; } namespace gl { class Buffer; class Shader; class Program; class Texture; class Renderbuffer; class Sampler; class FenceSync; struct Data; class ResourceManager : angle::NonCopyable { public: explicit ResourceManager(rx::ImplFactory *factory); ~ResourceManager(); void addRef(); void release(); GLuint createBuffer(); GLuint createShader(const gl::Data &data, GLenum type); GLuint createProgram(); GLuint createTexture(); GLuint createRenderbuffer(); GLuint createSampler(); GLuint createFenceSync(); void deleteBuffer(GLuint buffer); void deleteShader(GLuint shader); void deleteProgram(GLuint program); void deleteTexture(GLuint texture); void deleteRenderbuffer(GLuint renderbuffer); void deleteSampler(GLuint sampler); void deleteFenceSync(GLuint fenceSync); Buffer *getBuffer(GLuint handle); Shader *getShader(GLuint handle); Program *getProgram(GLuint handle) const; Texture *getTexture(GLuint handle); Renderbuffer *getRenderbuffer(GLuint handle); Sampler *getSampler(GLuint handle); FenceSync *getFenceSync(GLuint handle); void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer); void checkBufferAllocation(GLuint handle); void checkTextureAllocation(GLuint handle, GLenum type); void checkRenderbufferAllocation(GLuint handle); void checkSamplerAllocation(GLuint sampler); bool isSampler(GLuint sampler); private: void createTextureInternal(GLuint handle); rx::ImplFactory *mFactory; std::size_t mRefCount; typedef std::map BufferMap; BufferMap mBufferMap; HandleAllocator mBufferHandleAllocator; typedef std::map ShaderMap; ShaderMap mShaderMap; typedef std::map ProgramMap; ProgramMap mProgramMap; HandleAllocator mProgramShaderHandleAllocator; typedef std::map TextureMap; TextureMap mTextureMap; HandleAllocator mTextureHandleAllocator; typedef std::map RenderbufferMap; RenderbufferMap mRenderbufferMap; HandleAllocator mRenderbufferHandleAllocator; typedef std::map SamplerMap; SamplerMap mSamplerMap; HandleAllocator mSamplerHandleAllocator; typedef std::map FenceMap; FenceMap mFenceSyncMap; HandleAllocator mFenceSyncHandleAllocator; }; } #endif // LIBANGLE_RESOURCEMANAGER_H_