1// Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// ResourceManager.h : Defines the ResourceManager class, which tracks objects 16// shared by multiple GL contexts. 17 18#ifndef LIBGLES_CM_RESOURCEMANAGER_H_ 19#define LIBGLES_CM_RESOURCEMANAGER_H_ 20 21#include "common/NameSpace.hpp" 22 23#include <GLES/gl.h> 24 25#include <map> 26 27namespace es1 28{ 29class Buffer; 30class Texture; 31class Renderbuffer; 32 33enum TextureType 34{ 35 TEXTURE_2D, 36 TEXTURE_EXTERNAL, 37 38 TEXTURE_TYPE_COUNT, 39 TEXTURE_UNKNOWN 40}; 41 42class ResourceManager 43{ 44public: 45 ResourceManager(); 46 ~ResourceManager(); 47 48 void addRef(); 49 void release(); 50 51 GLuint createBuffer(); 52 GLuint createTexture(); 53 GLuint createRenderbuffer(); 54 55 void deleteBuffer(GLuint buffer); 56 void deleteTexture(GLuint texture); 57 void deleteRenderbuffer(GLuint renderbuffer); 58 59 Buffer *getBuffer(GLuint handle); 60 Texture *getTexture(GLuint handle); 61 Renderbuffer *getRenderbuffer(GLuint handle); 62 63 void checkBufferAllocation(unsigned int buffer); 64 void checkTextureAllocation(GLuint texture, TextureType type); 65 void checkRenderbufferAllocation(GLuint handle); 66 67private: 68 std::size_t mRefCount; 69 70 gl::NameSpace<Buffer> mBufferNameSpace; 71 gl::NameSpace<Texture> mTextureNameSpace; 72 gl::NameSpace<Renderbuffer> mRenderbufferNameSpace; 73}; 74 75} 76 77#endif // LIBGLES_CM_RESOURCEMANAGER_H_ 78