1d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens//
3d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Licensed under the Apache License, Version 2.0 (the "License");
4d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// you may not use this file except in compliance with the License.
5d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// You may obtain a copy of the License at
6d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens//
7d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens//    http://www.apache.org/licenses/LICENSE-2.0
8d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens//
9d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Unless required by applicable law or agreed to in writing, software
10d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// distributed under the License is distributed on an "AS IS" BASIS,
11d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// See the License for the specific language governing permissions and
13d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// limitations under the License.
14d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
15d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// ResourceManager.h : Defines the ResourceManager class, which tracks objects
16d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// shared by multiple GL contexts.
17d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
18d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#ifndef LIBGL_RESOURCEMANAGER_H_
19d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#define LIBGL_RESOURCEMANAGER_H_
20d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
21d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include "common/NameSpace.hpp"
22d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
23d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#define _GDI32_
24d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <windows.h>
25d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <GL/GL.h>
26d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <GL/glext.h>
27d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
28d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <map>
29d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
30d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensnamespace gl
31d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{
32d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Buffer;
33d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Shader;
34d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Program;
35d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Texture;
36d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Renderbuffer;
37d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
38d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensenum TextureType
39d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{
40d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	TEXTURE_2D,
41d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	PROXY_TEXTURE_2D,
42d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	TEXTURE_CUBE,
43d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
44d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	TEXTURE_TYPE_COUNT,
45d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	TEXTURE_UNKNOWN
46d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens};
47d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
48d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass ResourceManager
49d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{
50d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capenspublic:
51d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	ResourceManager();
52d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	~ResourceManager();
53d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
54d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void addRef();
55d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void release();
56d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
57d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	GLuint createBuffer();
58d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	GLuint createShader(GLenum type);
59d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	GLuint createProgram();
60d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	GLuint createTexture();
61d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	GLuint createRenderbuffer();
62d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
63d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void deleteBuffer(GLuint buffer);
64d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void deleteShader(GLuint shader);
65d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void deleteProgram(GLuint program);
66d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void deleteTexture(GLuint texture);
67d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void deleteRenderbuffer(GLuint renderbuffer);
68d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
69d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	Buffer *getBuffer(GLuint handle);
70d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	Shader *getShader(GLuint handle);
71d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	Program *getProgram(GLuint handle);
72d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	Texture *getTexture(GLuint handle);
73d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	Renderbuffer *getRenderbuffer(GLuint handle);
74d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
75d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void setRenderbuffer(GLuint handle, Renderbuffer *renderbuffer);
76d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
77d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void checkBufferAllocation(unsigned int buffer);
78d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void checkTextureAllocation(GLuint texture, TextureType type);
79d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	void checkRenderbufferAllocation(GLuint renderbuffer);
80d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
81d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensprivate:
82d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	std::size_t mRefCount;
83d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
84d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	typedef std::map<GLint, Buffer*> BufferMap;
85d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	BufferMap mBufferMap;
86d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	//NameSpace mBufferNameSpace;
87d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
88d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	typedef std::map<GLint, Shader*> ShaderMap;
89d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	ShaderMap mShaderMap;
90d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
91d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	typedef std::map<GLint, Program*> ProgramMap;
92d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	ProgramMap mProgramMap;
93d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	//NameSpace mProgramShaderNameSpace;
94d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
95d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	typedef std::map<GLint, Texture*> TextureMap;
96d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	TextureMap mTextureMap;
97d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	//NameSpace mTextureNameSpace;
98d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
99d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	typedef std::map<GLint, Renderbuffer*> RenderbufferMap;
100d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	RenderbufferMap mRenderbufferMap;
101d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens	//NameSpace mRenderbufferNameSpace;
102d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens};
103d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
104d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens}
105d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens
106d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#endif // LIBGL_RESOURCEMANAGER_H_
107