diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index b90c53ec24..e1d4dec612 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -366,6 +366,12 @@ if GetHost() == "darwin": if VERSION is None: # Take the value from the setup.cfg file. VERSION = GetMetadataValue('version') + match = re.match(r'^\d+\.\d+(\.\d+)+', VERSION) + if not match: + exit("Invalid version %s in setup.cfg, three digits are required" % (VERSION)) + if WHLVERSION is None: + WHLVERSION = VERSION + VERSION = match.group() if WHLVERSION is None: WHLVERSION = VERSION @@ -2684,11 +2690,18 @@ template class CheckPandaVersion; def CreatePandaVersionFiles(): - version1=int(VERSION.split(".")[0]) - version2=int(VERSION.split(".")[1]) - version3=int(VERSION.split(".")[2]) - nversion=version1*1000000+version2*1000+version3 - if (DISTRIBUTOR != "cmu"): + parts = VERSION.split(".", 2) + version1 = int(parts[0]) + version2 = int(parts[1]) + version3 = 0 + if len(parts) > 2: + for c in parts[2]: + if c.isdigit(): + version3 = version3 * 10 + ord(c) - 48 + else: + break + nversion = version1 * 1000000 + version2 * 1000 + version3 + if DISTRIBUTOR != "cmu": # Subtract 1 if we are not an official version. nversion -= 1 diff --git a/panda/src/gobj/geomVertexArrayData.cxx b/panda/src/gobj/geomVertexArrayData.cxx index 9b07969e46..13f885280a 100644 --- a/panda/src/gobj/geomVertexArrayData.cxx +++ b/panda/src/gobj/geomVertexArrayData.cxx @@ -215,19 +215,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; }