gfx/angle/src/libGLESv2/HandleAllocator.cpp

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:289dc2e7db7b
1 #include "precompiled.h"
2 //
3 // Copyright (c) 2002-2011 The ANGLE Project Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style license that can be
5 // found in the LICENSE file.
6 //
7
8 // HandleAllocator.cpp: Implements the gl::HandleAllocator class, which is used
9 // to allocate GL handles.
10
11 #include "libGLESv2/HandleAllocator.h"
12
13 #include "libGLESv2/main.h"
14
15 namespace gl
16 {
17
18 HandleAllocator::HandleAllocator() : mBaseValue(1), mNextValue(1)
19 {
20 }
21
22 HandleAllocator::~HandleAllocator()
23 {
24 }
25
26 void HandleAllocator::setBaseHandle(GLuint value)
27 {
28 ASSERT(mBaseValue == mNextValue);
29 mBaseValue = value;
30 mNextValue = value;
31 }
32
33 GLuint HandleAllocator::allocate()
34 {
35 if (mFreeValues.size())
36 {
37 GLuint handle = mFreeValues.back();
38 mFreeValues.pop_back();
39 return handle;
40 }
41 return mNextValue++;
42 }
43
44 void HandleAllocator::release(GLuint handle)
45 {
46 if (handle == mNextValue - 1)
47 {
48 // Don't drop below base value
49 if(mNextValue > mBaseValue)
50 {
51 mNextValue--;
52 }
53 }
54 else
55 {
56 // Only free handles that we own - don't drop below the base value
57 if (handle >= mBaseValue)
58 {
59 mFreeValues.push_back(handle);
60 }
61 }
62 }
63
64 }

mercurial