diff --git a/panda/src/gobj/geomVertexArrayData.cxx b/panda/src/gobj/geomVertexArrayData.cxx index 75a9a5db20..674c2182b6 100644 --- a/panda/src/gobj/geomVertexArrayData.cxx +++ b/panda/src/gobj/geomVertexArrayData.cxx @@ -239,19 +239,24 @@ is_prepared(PreparedGraphicsObjects *prepared_objects) const { VertexBufferContext *GeomVertexArrayData:: prepare_now(PreparedGraphicsObjects *prepared_objects, GraphicsStateGuardianBase *gsg) { - if (_contexts == nullptr) { + if (_contexts != nullptr) { + Contexts::const_iterator ci; + ci = _contexts->find(prepared_objects); + if (ci != _contexts->end()) { + return (*ci).second; + } + } else { _contexts = new Contexts; } - Contexts::const_iterator ci; - ci = _contexts->find(prepared_objects); - if (ci != _contexts->end()) { - return (*ci).second; - } VertexBufferContext *vbc = prepared_objects->prepare_vertex_buffer_now(this, gsg); if (vbc != nullptr) { (*_contexts)[prepared_objects] = vbc; } + else if (_contexts->empty()) { + delete _contexts; + _contexts = nullptr; + } return vbc; } diff --git a/panda/src/gobj/shaderBuffer.cxx b/panda/src/gobj/shaderBuffer.cxx index fa16293d4d..9164a870ae 100644 --- a/panda/src/gobj/shaderBuffer.cxx +++ b/panda/src/gobj/shaderBuffer.cxx @@ -76,19 +76,24 @@ is_prepared(PreparedGraphicsObjects *prepared_objects) const { BufferContext *ShaderBuffer:: prepare_now(PreparedGraphicsObjects *prepared_objects, GraphicsStateGuardianBase *gsg) { - if (_contexts == nullptr) { + if (_contexts != nullptr) { + Contexts::const_iterator ci; + ci = _contexts->find(prepared_objects); + if (ci != _contexts->end()) { + return (*ci).second; + } + } else { _contexts = new Contexts; } - Contexts::const_iterator ci; - ci = _contexts->find(prepared_objects); - if (ci != _contexts->end()) { - return (*ci).second; - } BufferContext *vbc = prepared_objects->prepare_shader_buffer_now(this, gsg); if (vbc != nullptr) { (*_contexts)[prepared_objects] = vbc; } + else if (_contexts->empty()) { + delete _contexts; + _contexts = nullptr; + } return vbc; }