summaryrefslogtreecommitdiff
path: root/src/mbgl/gl/object_store.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/gl/object_store.cpp')
-rw-r--r--src/mbgl/gl/object_store.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/mbgl/gl/object_store.cpp b/src/mbgl/gl/object_store.cpp
index 4198c090a3..4139854f61 100644
--- a/src/mbgl/gl/object_store.cpp
+++ b/src/mbgl/gl/object_store.cpp
@@ -22,7 +22,11 @@ void BufferDeleter::operator()(GLuint id) const {
void TextureDeleter::operator()(GLuint id) const {
assert(store);
- store->abandonedTextures.push_back(id);
+ if (store->pooledTextures.size() >= TextureMax) {
+ store->abandonedTextures.push_back(id);
+ } else {
+ store->pooledTextures.push_back(id);
+ }
}
void VAODeleter::operator()(GLuint id) const {
@@ -30,14 +34,8 @@ void VAODeleter::operator()(GLuint id) const {
store->abandonedVAOs.push_back(id);
}
-void TexturePoolDeleter::operator()(ObjectPool ids) const {
- assert(store);
- for (const auto& id : ids) {
- store->abandonedTextures.push_back(id);
- }
-}
-
ObjectStore::~ObjectStore() {
+ assert(pooledTextures.empty());
assert(abandonedPrograms.empty());
assert(abandonedShaders.empty());
assert(abandonedBuffers.empty());
@@ -45,6 +43,12 @@ ObjectStore::~ObjectStore() {
assert(abandonedVAOs.empty());
}
+void ObjectStore::reset() {
+ std::copy(pooledTextures.begin(), pooledTextures.end(), std::back_inserter(abandonedTextures));
+ pooledTextures.resize(0);
+ performCleanup();
+}
+
void ObjectStore::performCleanup() {
for (GLuint id : abandonedPrograms) {
MBGL_CHECK_ERROR(glDeleteProgram(id));