diff -Nru simgear-2020.3.5+dfsg/debian/changelog simgear-2020.3.6+dfsg/debian/changelog --- simgear-2020.3.5+dfsg/debian/changelog 2020-12-26 20:58:34.000000000 +0000 +++ simgear-2020.3.6+dfsg/debian/changelog 2021-02-13 21:15:50.000000000 +0000 @@ -1,3 +1,11 @@ +simgear (1:2020.3.6+dfsg-1) unstable; urgency=medium + + * New upstream release 2020.3.6+dfsg + * Drop patch fix-ftbfs-split_iterator.patch, upstream fixed this + with an auto type, instead. + + -- Markus Wanner Sat, 13 Feb 2021 22:15:50 +0100 + simgear (1:2020.3.5+dfsg-1) unstable; urgency=medium * New upstream version 2020.3.5+dfsg diff -Nru simgear-2020.3.5+dfsg/debian/patches/fix-ftbfs-split_iterator.patch simgear-2020.3.6+dfsg/debian/patches/fix-ftbfs-split_iterator.patch --- simgear-2020.3.5+dfsg/debian/patches/fix-ftbfs-split_iterator.patch 2020-12-26 20:58:34.000000000 +0000 +++ simgear-2020.3.6+dfsg/debian/patches/fix-ftbfs-split_iterator.patch 2021-02-07 19:22:28.000000000 +0000 @@ -1,14 +0,0 @@ ---- a/simgear/props/props.cxx -+++ b/simgear/props/props.cxx -@@ -574,10 +574,8 @@ - int last_index = -1) - { - using namespace boost; -- typedef split_iterator::type> -- PathSplitIterator; - -- PathSplitIterator itr -+ auto itr - = make_split_iterator(path, first_finder("/", is_equal())); - if (*path.begin() == '/') - return find_node_aux(current->getRootNode(), itr, create, last_index); diff -Nru simgear-2020.3.5+dfsg/debian/patches/series simgear-2020.3.6+dfsg/debian/patches/series --- simgear-2020.3.5+dfsg/debian/patches/series 2020-12-26 20:58:34.000000000 +0000 +++ simgear-2020.3.6+dfsg/debian/patches/series 2021-02-07 19:22:47.000000000 +0000 @@ -5,4 +5,3 @@ disable_network_tests.patch spelling_fixes.patch fix-ftbfs-on-armel-armhf.patch -fix-ftbfs-split_iterator.patch diff -Nru simgear-2020.3.5+dfsg/simgear/environment/metar.cxx simgear-2020.3.6+dfsg/simgear/environment/metar.cxx --- simgear-2020.3.5+dfsg/simgear/environment/metar.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/environment/metar.cxx 2021-01-23 18:01:02.000000000 +0000 @@ -46,6 +46,7 @@ #include #include +#include #include #include "metar.hxx" @@ -1068,9 +1069,12 @@ return false; m += i; - if (!strncmp(m, "///", 3)) // vis not measurable (e.g. because of heavy snowing) + if (!strncmp(m, "///", 3)) { // vis not measurable (e.g. because of heavy snowing) m += 3, i = -1; - else if (scanBoundary(&m)) { + sg_srandom_time(); + // randomize the base height to avoid the black sky issue + i = 50 + static_cast(sg_random() * 250.0); // range [5,000, 30,000] + } else if (scanBoundary(&m)) { _m = m; return true; // ignore single OVC/BKN/... } else if (!scanNumber(&m, &i, 3)) diff -Nru simgear-2020.3.5+dfsg/simgear/io/sg_binobj.cxx simgear-2020.3.6+dfsg/simgear/io/sg_binobj.cxx --- simgear-2020.3.5+dfsg/simgear/io/sg_binobj.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/io/sg_binobj.cxx 2021-01-23 18:01:02.000000000 +0000 @@ -566,8 +566,10 @@ sgReadUInt( fp, &header ); if (sgReadError()) { + int code = 0; + const char* gzErrorString = gzerror(fp, &code); gzclose(fp); - throw sg_io_exception("Unable to read BTG header: " + simgear::strutils::error_string(errno), sg_location(file)); + throw sg_io_exception("Unable to read BTG header: " + string{gzErrorString} + ", code =" + std::to_string(code), sg_location(file)); } if ( ((header & 0xFF000000) >> 24) == 'S' && diff -Nru simgear-2020.3.5+dfsg/simgear/package/Root.cxx simgear-2020.3.6+dfsg/simgear/package/Root.cxx --- simgear-2020.3.5+dfsg/simgear/package/Root.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/package/Root.cxx 2021-01-23 18:01:02.000000000 +0000 @@ -133,7 +133,9 @@ void fireRefreshStatus(CatalogRef catalog, Delegate::StatusCode status) { - for (auto d : delegates) { + // take a copy of delegates since firing this can modify the data + const auto currentDelegates = delegates; + for (auto d : currentDelegates) { d->catalogRefreshed(catalog, status); } } diff -Nru simgear-2020.3.5+dfsg/simgear/props/props.cxx simgear-2020.3.6+dfsg/simgear/props/props.cxx --- simgear-2020.3.5+dfsg/simgear/props/props.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/props/props.cxx 2021-01-23 18:01:02.000000000 +0000 @@ -566,23 +566,15 @@ } } #else -template -SGPropertyNode* -find_node (SGPropertyNode * current, - const Range& path, - bool create, - int last_index = -1) -{ +template +SGPropertyNode *find_node(SGPropertyNode *current, const Range &path, + bool create, int last_index = -1) { using namespace boost; - typedef split_iterator::type> - PathSplitIterator; - - PathSplitIterator itr - = make_split_iterator(path, first_finder("/", is_equal())); + auto itr = make_split_iterator(path, first_finder("/", is_equal())); if (*path.begin() == '/') return find_node_aux(current->getRootNode(), itr, create, last_index); - else - return find_node_aux(current, itr, create, last_index); + else + return find_node_aux(current, itr, create, last_index); } #endif diff -Nru simgear-2020.3.5+dfsg/simgear/scene/material/Effect.cxx simgear-2020.3.6+dfsg/simgear/scene/material/Effect.cxx --- simgear-2020.3.5+dfsg/simgear/scene/material/Effect.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/scene/material/Effect.cxx 2021-01-23 18:01:03.000000000 +0000 @@ -76,7 +76,7 @@ #include #include #include - +#include #include namespace simgear @@ -928,7 +928,8 @@ // FIXME orig: const string& shaderName = shaderKey.first; string shaderName = shaderKey.first; Shader::Type stype = (Shader::Type)shaderKey.second; - if (getPropertyRoot()->getBoolValue("/sim/version/compositor-support", false) && + const bool compositorEnabled = getPropertyRoot()->getBoolValue("/sim/version/compositor-support", false); + if (compositorEnabled && shaderName.substr(0, shaderName.find("/")) == "Shaders") { shaderName = "Compositor/" + shaderName; } @@ -936,7 +937,9 @@ if (fileName.empty()) { SG_LOG(SG_INPUT, SG_ALERT, "Could not locate shader" << shaderName); - + if (!compositorEnabled) { + reportError("Missing shader", shaderName); + } throw BuilderException(string("couldn't find shader ") + shaderName); diff -Nru simgear-2020.3.5+dfsg/simgear/scene/material/TextureBuilder.cxx simgear-2020.3.6+dfsg/simgear/scene/material/TextureBuilder.cxx --- simgear-2020.3.5+dfsg/simgear/scene/material/TextureBuilder.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/scene/material/TextureBuilder.cxx 2021-01-23 18:01:03.000000000 +0000 @@ -273,11 +273,19 @@ options->setLoadOriginHint(SGReaderWriterOptions::LoadOriginHint::ORIGIN_EFFECTS_NORMALIZED); else options->setLoadOriginHint(SGReaderWriterOptions::LoadOriginHint::ORIGIN_EFFECTS); -#if OSG_VERSION_LESS_THAN(3,4,2) - result = osgDB::readImageFile(imageName, options); -#else - result = osgDB::readRefImageFile(imageName, options); -#endif + + try { + #if OSG_VERSION_LESS_THAN(3,4,2) + result = osgDB::readImageFile(imageName, options); + #else + result = osgDB::readRefImageFile(imageName, options); + #endif + } catch (std::bad_alloc& ba) { + SG_LOG(SG_GL, SG_ALERT, "Bad allocation loading:" << imageName); + // todo: report low memory warning + return false; + } + options->setLoadOriginHint(origLOH); osg::ref_ptr image; if (result.success()) diff -Nru simgear-2020.3.5+dfsg/simgear/scene/model/animation.cxx simgear-2020.3.6+dfsg/simgear/scene/model/animation.cxx --- simgear-2020.3.5+dfsg/simgear/scene/model/animation.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/scene/model/animation.cxx 2021-01-23 18:01:03.000000000 +0000 @@ -1135,16 +1135,8 @@ double intPart; double rot = modf(rotation, &intPart); double angle = rot * 2.0 * osg::PI; - const SGVec3d& sgcenter = transform->getCenter(); - const SGVec3d& sgaxis = transform->getAxis(); - Matrixd mat = Matrixd::translate(-sgcenter[0], -sgcenter[1], -sgcenter[2]) - * Matrixd::rotate(angle, sgaxis[0], sgaxis[1], sgaxis[2]) - * Matrixd::translate(sgcenter[0], sgcenter[1], sgcenter[2]) - * *cv->getModelViewMatrix(); - ref_ptr refmat = new RefMatrix(mat); - cv->pushModelViewMatrix(refmat.get(), transform->getReferenceFrame()); + transform->setAngleRad(angle); traverse(transform, nv); - cv->popModelViewMatrix(); } else { traverse(transform, nv); } diff -Nru simgear-2020.3.5+dfsg/simgear/scene/tgdb/SGBuildingBin.cxx simgear-2020.3.6+dfsg/simgear/scene/tgdb/SGBuildingBin.cxx --- simgear-2020.3.5+dfsg/simgear/scene/tgdb/SGBuildingBin.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/scene/tgdb/SGBuildingBin.cxx 2021-01-23 18:01:03.000000000 +0000 @@ -441,6 +441,10 @@ if (hash_pos != std::string::npos) line.resize(hash_pos); + if (line.empty()) { + continue; // skip blank lines + } + // and process further std::stringstream in(line); diff -Nru simgear-2020.3.5+dfsg/simgear/scene/tgdb/SGOceanTile.cxx simgear-2020.3.6+dfsg/simgear/scene/tgdb/SGOceanTile.cxx --- simgear-2020.3.5+dfsg/simgear/scene/tgdb/SGOceanTile.cxx 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear/scene/tgdb/SGOceanTile.cxx 2021-01-23 18:01:03.000000000 +0000 @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -340,5 +341,10 @@ transform->addChild(geode); transform->setNodeMask( ~(simgear::CASTSHADOW_BIT | simgear::MODELLIGHT_BIT) ); + // Create a BVH at this point. This is normally provided by the file loader, but as we create the + // geometry programmatically, no file loader is involved. + BoundingVolumeBuildVisitor bvhBuilder(false); + transform->accept(bvhBuilder); + return transform; } diff -Nru simgear-2020.3.5+dfsg/simgear-version simgear-2020.3.6+dfsg/simgear-version --- simgear-2020.3.5+dfsg/simgear-version 2020-12-26 20:55:11.000000000 +0000 +++ simgear-2020.3.6+dfsg/simgear-version 2021-01-23 18:01:02.000000000 +0000 @@ -1 +1 @@ -2020.3.5 +2020.3.6