Home | History | Annotate | Download | only in libGLESv2
      1 //
      2 // Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // ResourceManager.h : Defines the ResourceManager class, which tracks objects
      8 // shared by multiple GL contexts.
      9 
     10 #ifndef LIBGLESV2_RESOURCEMANAGER_H_
     11 #define LIBGLESV2_RESOURCEMANAGER_H_
     12 
     13 #include <GLES3/gl3.h>
     14 #include <GLES2/gl2.h>
     15 
     16 #include <unordered_map>
     17 
     18 #include "common/angleutils.h"
     19 #include "libGLESv2/angletypes.h"
     20 #include "libGLESv2/HandleAllocator.h"
     21 
     22 namespace rx
     23 {
     24 class Renderer;
     25 }
     26 
     27 namespace gl
     28 {
     29 class Buffer;
     30 class Shader;
     31 class Program;
     32 class Texture;
     33 class FramebufferAttachment;
     34 class Sampler;
     35 class FenceSync;
     36 
     37 class ResourceManager
     38 {
     39   public:
     40     explicit ResourceManager(rx::Renderer *renderer);
     41     ~ResourceManager();
     42 
     43     void addRef();
     44     void release();
     45 
     46     GLuint createBuffer();
     47     GLuint createShader(GLenum type);
     48     GLuint createProgram();
     49     GLuint createTexture();
     50     GLuint createRenderbuffer();
     51     GLuint createSampler();
     52     GLuint createFenceSync();
     53 
     54     void deleteBuffer(GLuint buffer);
     55     void deleteShader(GLuint shader);
     56     void deleteProgram(GLuint program);
     57     void deleteTexture(GLuint texture);
     58     void deleteRenderbuffer(GLuint renderbuffer);
     59     void deleteSampler(GLuint sampler);
     60     void deleteFenceSync(GLuint fenceSync);
     61 
     62     Buffer *getBuffer(GLuint handle);
     63     Shader *getShader(GLuint handle);
     64     Program *getProgram(GLuint handle);
     65     Texture *getTexture(GLuint handle);
     66     FramebufferAttachment *getRenderbuffer(GLuint handle);
     67     Sampler *getSampler(GLuint handle);
     68     FenceSync *getFenceSync(GLuint handle);
     69 
     70     void setRenderbuffer(GLuint handle, FramebufferAttachment *renderbuffer);
     71 
     72     void checkBufferAllocation(unsigned int buffer);
     73     void checkTextureAllocation(GLuint texture, TextureType type);
     74     void checkRenderbufferAllocation(GLuint renderbuffer);
     75     void checkSamplerAllocation(GLuint sampler);
     76 
     77     bool isSampler(GLuint sampler);
     78 
     79   private:
     80     DISALLOW_COPY_AND_ASSIGN(ResourceManager);
     81 
     82     std::size_t mRefCount;
     83     rx::Renderer *mRenderer;
     84 
     85     typedef std::unordered_map<GLuint, Buffer*> BufferMap;
     86     BufferMap mBufferMap;
     87     HandleAllocator mBufferHandleAllocator;
     88 
     89     typedef std::unordered_map<GLuint, Shader*> ShaderMap;
     90     ShaderMap mShaderMap;
     91 
     92     typedef std::unordered_map<GLuint, Program*> ProgramMap;
     93     ProgramMap mProgramMap;
     94     HandleAllocator mProgramShaderHandleAllocator;
     95 
     96     typedef std::unordered_map<GLuint, Texture*> TextureMap;
     97     TextureMap mTextureMap;
     98     HandleAllocator mTextureHandleAllocator;
     99 
    100     typedef std::unordered_map<GLuint, FramebufferAttachment*> RenderbufferMap;
    101     RenderbufferMap mRenderbufferMap;
    102     HandleAllocator mRenderbufferHandleAllocator;
    103 
    104     typedef std::unordered_map<GLuint, Sampler*> SamplerMap;
    105     SamplerMap mSamplerMap;
    106     HandleAllocator mSamplerHandleAllocator;
    107 
    108     typedef std::unordered_map<GLuint, FenceSync*> FenceMap;
    109     FenceMap mFenceSyncMap;
    110     HandleAllocator mFenceSyncHandleAllocator;
    111 };
    112 
    113 }
    114 
    115 #endif // LIBGLESV2_RESOURCEMANAGER_H_
    116