11a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com//
21a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com// Copyright (c) 2002-2011 The ANGLE Project Authors. All rights reserved.
31a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com// Use of this source code is governed by a BSD-style license that can be
41a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com// found in the LICENSE file.
51a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com//
61a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
71a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com// HandleAllocator.h: Defines the gl::HandleAllocator class, which is used to
81a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com// allocate GL handles.
91a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
101a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com#ifndef LIBGLESV2_HANDLEALLOCATOR_H_
111a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com#define LIBGLESV2_HANDLEALLOCATOR_H_
121a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
130b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include "common/angleutils.h"
140b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang
15f51639a4d10c6b31a813a8154ed2c489cc7e55f3Jamie Madill#include "angle_gl.h"
161a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
171a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com#include <vector>
181a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
191a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.comnamespace gl
201a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com{
211a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
221a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.comclass HandleAllocator
231a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com{
241a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com  public:
251a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    HandleAllocator();
261a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    virtual ~HandleAllocator();
271a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
281a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    void setBaseHandle(GLuint value);
291a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
301a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    GLuint allocate();
311a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    void release(GLuint handle);
321a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
331a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com  private:
341a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    DISALLOW_COPY_AND_ASSIGN(HandleAllocator);
351a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
361a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    GLuint mBaseValue;
371a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    GLuint mNextValue;
381a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    typedef std::vector<GLuint> HandleList;
391a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    HandleList mFreeValues;
401a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com};
411a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
421a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com}
431a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com
441a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com#endif   // LIBGLESV2_HANDLEALLOCATOR_H_
45