gfx/angle/src/libGLESv2/ResourceManager.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/gfx/angle/src/libGLESv2/ResourceManager.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,108 @@
     1.4 +//
     1.5 +// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
     1.6 +// Use of this source code is governed by a BSD-style license that can be
     1.7 +// found in the LICENSE file.
     1.8 +//
     1.9 +
    1.10 +// ResourceManager.h : Defines the ResourceManager class, which tracks objects
    1.11 +// shared by multiple GL contexts.
    1.12 +
    1.13 +#ifndef LIBGLESV2_RESOURCEMANAGER_H_
    1.14 +#define LIBGLESV2_RESOURCEMANAGER_H_
    1.15 +
    1.16 +#define GL_APICALL
    1.17 +#include <GLES2/gl2.h>
    1.18 +
    1.19 +#ifdef _MSC_VER
    1.20 +#include <hash_map>
    1.21 +#else
    1.22 +#include <unordered_map>
    1.23 +#endif
    1.24 +
    1.25 +#include "common/angleutils.h"
    1.26 +#include "libGLESv2/angletypes.h"
    1.27 +#include "libGLESv2/HandleAllocator.h"
    1.28 +
    1.29 +namespace rx
    1.30 +{
    1.31 +class Renderer;
    1.32 +}
    1.33 +
    1.34 +namespace gl
    1.35 +{
    1.36 +class Buffer;
    1.37 +class Shader;
    1.38 +class Program;
    1.39 +class Texture;
    1.40 +class Renderbuffer;
    1.41 +
    1.42 +class ResourceManager
    1.43 +{
    1.44 +  public:
    1.45 +    explicit ResourceManager(rx::Renderer *renderer);
    1.46 +    ~ResourceManager();
    1.47 +
    1.48 +    void addRef();
    1.49 +    void release();
    1.50 +
    1.51 +    GLuint createBuffer();
    1.52 +    GLuint createShader(GLenum type);
    1.53 +    GLuint createProgram();
    1.54 +    GLuint createTexture();
    1.55 +    GLuint createRenderbuffer();
    1.56 +
    1.57 +    void deleteBuffer(GLuint buffer);
    1.58 +    void deleteShader(GLuint shader);
    1.59 +    void deleteProgram(GLuint program);
    1.60 +    void deleteTexture(GLuint texture);
    1.61 +    void deleteRenderbuffer(GLuint renderbuffer);
    1.62 +
    1.63 +    Buffer *getBuffer(GLuint handle);
    1.64 +    Shader *getShader(GLuint handle);
    1.65 +    Program *getProgram(GLuint handle);
    1.66 +    Texture *getTexture(GLuint handle);
    1.67 +    Renderbuffer *getRenderbuffer(GLuint handle);
    1.68 +    
    1.69 +    void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
    1.70 +
    1.71 +    void checkBufferAllocation(unsigned int buffer);
    1.72 +    void checkTextureAllocation(GLuint texture, TextureType type);
    1.73 +    void checkRenderbufferAllocation(GLuint renderbuffer);
    1.74 +
    1.75 +  private:
    1.76 +    DISALLOW_COPY_AND_ASSIGN(ResourceManager);
    1.77 +
    1.78 +    std::size_t mRefCount;
    1.79 +    rx::Renderer *mRenderer;
    1.80 +
    1.81 +#ifndef HASH_MAP
    1.82 +# ifdef _MSC_VER
    1.83 +#  define HASH_MAP stdext::hash_map
    1.84 +# else
    1.85 +#  define HASH_MAP std::unordered_map
    1.86 +# endif
    1.87 +#endif
    1.88 +
    1.89 +    typedef HASH_MAP<GLuint, Buffer*> BufferMap;
    1.90 +    BufferMap mBufferMap;
    1.91 +    HandleAllocator mBufferHandleAllocator;
    1.92 +
    1.93 +    typedef HASH_MAP<GLuint, Shader*> ShaderMap;
    1.94 +    ShaderMap mShaderMap;
    1.95 +
    1.96 +    typedef HASH_MAP<GLuint, Program*> ProgramMap;
    1.97 +    ProgramMap mProgramMap;
    1.98 +    HandleAllocator mProgramShaderHandleAllocator;
    1.99 +
   1.100 +    typedef HASH_MAP<GLuint, Texture*> TextureMap;
   1.101 +    TextureMap mTextureMap;
   1.102 +    HandleAllocator mTextureHandleAllocator;
   1.103 +
   1.104 +    typedef HASH_MAP<GLuint, Renderbuffer*> RenderbufferMap;
   1.105 +    RenderbufferMap mRenderbufferMap;
   1.106 +    HandleAllocator mRenderbufferHandleAllocator;
   1.107 +};
   1.108 +
   1.109 +}
   1.110 +
   1.111 +#endif // LIBGLESV2_RESOURCEMANAGER_H_

mercurial