|
1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- |
|
2 * This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #include "VBOArena.h" |
|
7 #include "GLContext.h" |
|
8 |
|
9 using namespace mozilla::gl; |
|
10 |
|
11 GLuint VBOArena::Allocate(GLContext *aGLContext) |
|
12 { |
|
13 if (!mAvailableVBOs.size()) { |
|
14 GLuint vbo; |
|
15 aGLContext->fGenBuffers(1, &vbo); |
|
16 mAllocatedVBOs.push_back(vbo); |
|
17 return vbo; |
|
18 } |
|
19 GLuint vbo = mAvailableVBOs.back(); |
|
20 mAvailableVBOs.pop_back(); |
|
21 return vbo; |
|
22 } |
|
23 |
|
24 void VBOArena::Reset() |
|
25 { |
|
26 mAvailableVBOs = mAllocatedVBOs; |
|
27 } |
|
28 |
|
29 void VBOArena::Flush(GLContext *aGLContext) |
|
30 { |
|
31 if (mAvailableVBOs.size()) { |
|
32 #ifdef DEBUG |
|
33 printf_stderr("VBOArena::Flush for %u VBOs\n", mAvailableVBOs.size()); |
|
34 #endif |
|
35 aGLContext->fDeleteBuffers(mAvailableVBOs.size(), &mAvailableVBOs[0]); |
|
36 } |
|
37 } |