Browse Source

Merge branch 'master' into kimkulling-miniz-memoryaccessfix

Kim Kulling 7 years ago
parent
commit
98cb898463

+ 1 - 1
.travis.sh

@@ -46,7 +46,7 @@ if [ "$TRAVIS_OS_NAME" = "linux" ]; then
   if [ $ANALYZE = "ON" ] ; then
   if [ $ANALYZE = "ON" ] ; then
     if [ "$CC" = "clang" ]; then
     if [ "$CC" = "clang" ]; then
         scan-build cmake -G "Unix Makefiles" -DBUILD_SHARED_LIBS=OFF -DASSIMP_BUILD_TESTS=OFF
         scan-build cmake -G "Unix Makefiles" -DBUILD_SHARED_LIBS=OFF -DASSIMP_BUILD_TESTS=OFF
-        scan-build --status-bugs make -j2 -v
+        scan-build --status-bugs make -j2
     else
     else
         cppcheck --version
         cppcheck --version
         generate \
         generate \

+ 3 - 4
code/BaseImporter.cpp

@@ -89,12 +89,12 @@ aiScene* BaseImporter::ReadFile(const Importer* pImp, const std::string& pFile,
     FileSystemFilter filter(pFile,pIOHandler);
     FileSystemFilter filter(pFile,pIOHandler);
 
 
     // create a scene object to hold the data
     // create a scene object to hold the data
-    ScopeGuard<aiScene> sc(new aiScene());
+    std::unique_ptr<aiScene> sc(new aiScene());
 
 
     // dispatch importing
     // dispatch importing
     try
     try
     {
     {
-        InternReadFile( pFile, sc, &filter);
+        InternReadFile( pFile, sc.get(), &filter);
 
 
     } catch( const std::exception& err )    {
     } catch( const std::exception& err )    {
         // extract error description
         // extract error description
@@ -104,8 +104,7 @@ aiScene* BaseImporter::ReadFile(const Importer* pImp, const std::string& pFile,
     }
     }
 
 
     // return what we gathered from the import.
     // return what we gathered from the import.
-    sc.dismiss();
-    return sc;
+    return sc.release();
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------

+ 0 - 36
code/BaseImporter.h

@@ -65,42 +65,6 @@ class IOStream;
 #define AI_MAKE_MAGIC(string) ((uint32_t)((string[0] << 24) + \
 #define AI_MAKE_MAGIC(string) ((uint32_t)((string[0] << 24) + \
     (string[1] << 16) + (string[2] << 8) + string[3]))
     (string[1] << 16) + (string[2] << 8) + string[3]))
 
 
-// ---------------------------------------------------------------------------
-template <typename T>
-struct ScopeGuard
-{
-    explicit ScopeGuard(T* obj) : obj(obj), mdismiss() {}
-    ~ScopeGuard () throw() {
-        if (!mdismiss) {
-            delete obj;
-        }
-        obj = NULL;
-    }
-
-    T* dismiss() {
-        mdismiss=true;
-        return obj;
-    }
-
-    operator T*() {
-        return obj;
-    }
-
-    T* operator -> () {
-        return obj;
-    }
-
-private:
-    // no copying allowed.
-    ScopeGuard();
-    ScopeGuard( const ScopeGuard & );
-    ScopeGuard &operator = ( const ScopeGuard & );
-
-    T* obj;
-    bool mdismiss;
-};
-
-
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 /** FOR IMPORTER PLUGINS ONLY: The BaseImporter defines a common interface
 /** FOR IMPORTER PLUGINS ONLY: The BaseImporter defines a common interface

+ 7 - 7
code/BlenderLoader.cpp

@@ -1148,7 +1148,7 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 aiCamera* BlenderImporter::ConvertCamera(const Scene& /*in*/, const Object* obj, const Camera* cam, ConversionData& /*conv_data*/)
 aiCamera* BlenderImporter::ConvertCamera(const Scene& /*in*/, const Object* obj, const Camera* cam, ConversionData& /*conv_data*/)
 {
 {
-    ScopeGuard<aiCamera> out(new aiCamera());
+    std::unique_ptr<aiCamera> out(new aiCamera());
     out->mName = obj->id.name+2;
     out->mName = obj->id.name+2;
     out->mPosition = aiVector3D(0.f, 0.f, 0.f);
     out->mPosition = aiVector3D(0.f, 0.f, 0.f);
     out->mUp = aiVector3D(0.f, 1.f, 0.f);
     out->mUp = aiVector3D(0.f, 1.f, 0.f);
@@ -1159,13 +1159,13 @@ aiCamera* BlenderImporter::ConvertCamera(const Scene& /*in*/, const Object* obj,
     out->mClipPlaneNear = cam->clipsta;
     out->mClipPlaneNear = cam->clipsta;
     out->mClipPlaneFar = cam->clipend;
     out->mClipPlaneFar = cam->clipend;
 
 
-    return out.dismiss();
+    return out.release();
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 aiLight* BlenderImporter::ConvertLight(const Scene& /*in*/, const Object* obj, const Lamp* lamp, ConversionData& /*conv_data*/)
 aiLight* BlenderImporter::ConvertLight(const Scene& /*in*/, const Object* obj, const Lamp* lamp, ConversionData& /*conv_data*/)
 {
 {
-    ScopeGuard<aiLight> out(new aiLight());
+    std::unique_ptr<aiLight> out(new aiLight());
     out->mName = obj->id.name+2;
     out->mName = obj->id.name+2;
 
 
     switch (lamp->type)
     switch (lamp->type)
@@ -1203,7 +1203,7 @@ aiLight* BlenderImporter::ConvertLight(const Scene& /*in*/, const Object* obj, c
     out->mColorAmbient = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
     out->mColorAmbient = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
     out->mColorSpecular = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
     out->mColorSpecular = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
     out->mColorDiffuse = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
     out->mColorDiffuse = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
-    return out.dismiss();
+    return out.release();
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
@@ -1221,7 +1221,7 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers
         ++it;
         ++it;
     }
     }
 
 
-    ScopeGuard<aiNode> node(new aiNode(obj->id.name+2)); // skip over the name prefix 'OB'
+    std::unique_ptr<aiNode> node(new aiNode(obj->id.name+2)); // skip over the name prefix 'OB'
     if (obj->data) {
     if (obj->data) {
         switch (obj->type)
         switch (obj->type)
         {
         {
@@ -1305,14 +1305,14 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers
         aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren]();
         aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren]();
         for (const Object* nobj :children) {
         for (const Object* nobj :children) {
             *nd = ConvertNode(in,nobj,conv_data,node->mTransformation * parentTransform);
             *nd = ConvertNode(in,nobj,conv_data,node->mTransformation * parentTransform);
-            (*nd++)->mParent = node;
+            (*nd++)->mParent = node.get();
         }
         }
     }
     }
 
 
     // apply modifiers
     // apply modifiers
     modifier_cache->ApplyModifiers(*node,conv_data,in,*obj);
     modifier_cache->ApplyModifiers(*node,conv_data,in,*obj);
 
 
-    return node.dismiss();
+    return node.release();
 }
 }
 
 
 #endif // ASSIMP_BUILD_NO_BLEND_IMPORTER
 #endif // ASSIMP_BUILD_NO_BLEND_IMPORTER

+ 4 - 4
code/C4DImporter.cpp

@@ -185,11 +185,11 @@ void C4DImporter::InternReadFile( const std::string& pFile,
         if(mesh->mMaterialIndex >= mat_count) {
         if(mesh->mMaterialIndex >= mat_count) {
             ++mat_count;
             ++mat_count;
 
 
-            ScopeGuard<aiMaterial> def_material(new aiMaterial());
+            std::unique_ptr<aiMaterial> def_material(new aiMaterial());
             const aiString name(AI_DEFAULT_MATERIAL_NAME);
             const aiString name(AI_DEFAULT_MATERIAL_NAME);
             def_material->AddProperty(&name, AI_MATKEY_NAME);
             def_material->AddProperty(&name, AI_MATKEY_NAME);
 
 
-            materials.push_back(def_material.dismiss());
+            materials.push_back(def_material.release());
             break;
             break;
         }
         }
     }
     }
@@ -412,7 +412,7 @@ aiMesh* C4DImporter::ReadMesh(BaseObject* object)
     const CPolygon* polys = polyObject->GetPolygonR();
     const CPolygon* polys = polyObject->GetPolygonR();
     ai_assert(polys != NULL);
     ai_assert(polys != NULL);
 
 
-    ScopeGuard<aiMesh> mesh(new aiMesh());
+    std::unique_ptr<aiMesh> mesh(new aiMesh());
     mesh->mNumFaces = static_cast<unsigned int>(polyCount);
     mesh->mNumFaces = static_cast<unsigned int>(polyCount);
     aiFace* face = mesh->mFaces = new aiFace[mesh->mNumFaces]();
     aiFace* face = mesh->mFaces = new aiFace[mesh->mNumFaces]();
 
 
@@ -616,7 +616,7 @@ aiMesh* C4DImporter::ReadMesh(BaseObject* object)
     }
     }
 
 
     mesh->mMaterialIndex = ResolveMaterial(polyObject);
     mesh->mMaterialIndex = ResolveMaterial(polyObject);
-    return mesh.dismiss();
+    return mesh.release();
 }
 }
 
 
 
 

+ 2 - 2
code/D3MFImporter.cpp

@@ -106,7 +106,7 @@ public:
 private:
 private:
     aiNode* ReadObject(aiScene* scene)
     aiNode* ReadObject(aiScene* scene)
     {
     {
-        ScopeGuard<aiNode> node(new aiNode());
+        std::unique_ptr<aiNode> node(new aiNode());
 
 
         std::vector<unsigned long> meshIds;
         std::vector<unsigned long> meshIds;
 
 
@@ -146,7 +146,7 @@ private:
 
 
         std::copy(meshIds.begin(), meshIds.end(), node->mMeshes);
         std::copy(meshIds.begin(), meshIds.end(), node->mMeshes);
 
 
-        return node.dismiss();
+        return node.release();
 
 
     }
     }
 
 

+ 14 - 14
code/FBXConverter.cpp

@@ -2744,10 +2744,10 @@ aiNodeAnim* Converter::GenerateRotationNodeAnim( const std::string& name,
     double& max_time,
     double& max_time,
     double& min_time )
     double& min_time )
 {
 {
-    ScopeGuard<aiNodeAnim> na( new aiNodeAnim() );
+    std::unique_ptr<aiNodeAnim> na( new aiNodeAnim() );
     na->mNodeName.Set( name );
     na->mNodeName.Set( name );
 
 
-    ConvertRotationKeys( na, curves, layer_map, start, stop, max_time, min_time, target.RotationOrder() );
+    ConvertRotationKeys( na.get(), curves, layer_map, start, stop, max_time, min_time, target.RotationOrder() );
 
 
     // dummy scaling key
     // dummy scaling key
     na->mScalingKeys = new aiVectorKey[ 1 ];
     na->mScalingKeys = new aiVectorKey[ 1 ];
@@ -2763,7 +2763,7 @@ aiNodeAnim* Converter::GenerateRotationNodeAnim( const std::string& name,
     na->mPositionKeys[ 0 ].mTime = 0.;
     na->mPositionKeys[ 0 ].mTime = 0.;
     na->mPositionKeys[ 0 ].mValue = aiVector3D();
     na->mPositionKeys[ 0 ].mValue = aiVector3D();
 
 
-    return na.dismiss();
+    return na.release();
 }
 }
 
 
 aiNodeAnim* Converter::GenerateScalingNodeAnim( const std::string& name,
 aiNodeAnim* Converter::GenerateScalingNodeAnim( const std::string& name,
@@ -2774,10 +2774,10 @@ aiNodeAnim* Converter::GenerateScalingNodeAnim( const std::string& name,
     double& max_time,
     double& max_time,
     double& min_time )
     double& min_time )
 {
 {
-    ScopeGuard<aiNodeAnim> na( new aiNodeAnim() );
+    std::unique_ptr<aiNodeAnim> na( new aiNodeAnim() );
     na->mNodeName.Set( name );
     na->mNodeName.Set( name );
 
 
-    ConvertScaleKeys( na, curves, layer_map, start, stop, max_time, min_time );
+    ConvertScaleKeys( na.get(), curves, layer_map, start, stop, max_time, min_time );
 
 
     // dummy rotation key
     // dummy rotation key
     na->mRotationKeys = new aiQuatKey[ 1 ];
     na->mRotationKeys = new aiQuatKey[ 1 ];
@@ -2793,7 +2793,7 @@ aiNodeAnim* Converter::GenerateScalingNodeAnim( const std::string& name,
     na->mPositionKeys[ 0 ].mTime = 0.;
     na->mPositionKeys[ 0 ].mTime = 0.;
     na->mPositionKeys[ 0 ].mValue = aiVector3D();
     na->mPositionKeys[ 0 ].mValue = aiVector3D();
 
 
-    return na.dismiss();
+    return na.release();
 }
 }
 
 
 
 
@@ -2806,10 +2806,10 @@ aiNodeAnim* Converter::GenerateTranslationNodeAnim( const std::string& name,
     double& min_time,
     double& min_time,
     bool inverse )
     bool inverse )
 {
 {
-    ScopeGuard<aiNodeAnim> na( new aiNodeAnim() );
+    std::unique_ptr<aiNodeAnim> na( new aiNodeAnim() );
     na->mNodeName.Set( name );
     na->mNodeName.Set( name );
 
 
-    ConvertTranslationKeys( na, curves, layer_map, start, stop, max_time, min_time );
+    ConvertTranslationKeys( na.get(), curves, layer_map, start, stop, max_time, min_time );
 
 
     if ( inverse ) {
     if ( inverse ) {
         for ( unsigned int i = 0; i < na->mNumPositionKeys; ++i ) {
         for ( unsigned int i = 0; i < na->mNumPositionKeys; ++i ) {
@@ -2831,7 +2831,7 @@ aiNodeAnim* Converter::GenerateTranslationNodeAnim( const std::string& name,
     na->mRotationKeys[ 0 ].mTime = 0.;
     na->mRotationKeys[ 0 ].mTime = 0.;
     na->mRotationKeys[ 0 ].mValue = aiQuaternion();
     na->mRotationKeys[ 0 ].mValue = aiQuaternion();
 
 
-    return na.dismiss();
+    return na.release();
 }
 }
 
 
 aiNodeAnim* Converter::GenerateSimpleNodeAnim( const std::string& name,
 aiNodeAnim* Converter::GenerateSimpleNodeAnim( const std::string& name,
@@ -2845,7 +2845,7 @@ aiNodeAnim* Converter::GenerateSimpleNodeAnim( const std::string& name,
     bool reverse_order )
     bool reverse_order )
 
 
 {
 {
-    ScopeGuard<aiNodeAnim> na( new aiNodeAnim() );
+    std::unique_ptr<aiNodeAnim> na( new aiNodeAnim() );
     na->mNodeName.Set( name );
     na->mNodeName.Set( name );
 
 
     const PropertyTable& props = target.Props();
     const PropertyTable& props = target.Props();
@@ -2917,7 +2917,7 @@ aiNodeAnim* Converter::GenerateSimpleNodeAnim( const std::string& name,
         // which requires all of rotation, scaling and translation
         // which requires all of rotation, scaling and translation
         // to be set.
         // to be set.
         if ( chain[ TransformationComp_Scaling ] != iter_end ) {
         if ( chain[ TransformationComp_Scaling ] != iter_end ) {
-            ConvertScaleKeys( na, ( *chain[ TransformationComp_Scaling ] ).second,
+            ConvertScaleKeys( na.get(), ( *chain[ TransformationComp_Scaling ] ).second,
                 layer_map,
                 layer_map,
                 start, stop,
                 start, stop,
                 max_time,
                 max_time,
@@ -2933,7 +2933,7 @@ aiNodeAnim* Converter::GenerateSimpleNodeAnim( const std::string& name,
         }
         }
 
 
         if ( chain[ TransformationComp_Rotation ] != iter_end ) {
         if ( chain[ TransformationComp_Rotation ] != iter_end ) {
-            ConvertRotationKeys( na, ( *chain[ TransformationComp_Rotation ] ).second,
+            ConvertRotationKeys( na.get(), ( *chain[ TransformationComp_Rotation ] ).second,
                 layer_map,
                 layer_map,
                 start, stop,
                 start, stop,
                 max_time,
                 max_time,
@@ -2951,7 +2951,7 @@ aiNodeAnim* Converter::GenerateSimpleNodeAnim( const std::string& name,
         }
         }
 
 
         if ( chain[ TransformationComp_Translation ] != iter_end ) {
         if ( chain[ TransformationComp_Translation ] != iter_end ) {
-            ConvertTranslationKeys( na, ( *chain[ TransformationComp_Translation ] ).second,
+            ConvertTranslationKeys( na.get(), ( *chain[ TransformationComp_Translation ] ).second,
                 layer_map,
                 layer_map,
                 start, stop,
                 start, stop,
                 max_time,
                 max_time,
@@ -2967,7 +2967,7 @@ aiNodeAnim* Converter::GenerateSimpleNodeAnim( const std::string& name,
         }
         }
 
 
     }
     }
-    return na.dismiss();
+    return na.release();
 }
 }
 
 
 Converter::KeyFrameListList Converter::GetKeyframeList( const std::vector<const AnimationCurveNode*>& nodes, int64_t start, int64_t stop )
 Converter::KeyFrameListList Converter::GetKeyframeList( const std::vector<const AnimationCurveNode*>& nodes, int64_t start, int64_t stop )

+ 3 - 3
code/MD3Loader.cpp

@@ -1018,11 +1018,11 @@ void MD3Importer::InternReadFile( const std::string& pFile,
 
 
                 // Convert the normal vector to uncompressed float3 format
                 // Convert the normal vector to uncompressed float3 format
                 aiVector3D& nor = pcMesh->mNormals[iCurrent];
                 aiVector3D& nor = pcMesh->mNormals[iCurrent];
-                LatLngNormalToVec3(pcVertices[pcTriangles->INDEXES[c]].NORMAL,(ai_real*)&nor);
+                LatLngNormalToVec3(pcVertices[index].NORMAL,(ai_real*)&nor);
 
 
                 // Read texture coordinates
                 // Read texture coordinates
-                pcMesh->mTextureCoords[0][iCurrent].x = pcUVs[ pcTriangles->INDEXES[c]].U;
-                pcMesh->mTextureCoords[0][iCurrent].y = 1.0f-pcUVs[ pcTriangles->INDEXES[c]].V;
+                pcMesh->mTextureCoords[0][iCurrent].x = pcUVs[index].U;
+                pcMesh->mTextureCoords[0][iCurrent].y = 1.0f-pcUVs[index].V;
             }
             }
             // Flip face order if necessary
             // Flip face order if necessary
             if (!shader || shader->cull == Q3Shader::CULL_CW) {
             if (!shader || shader->cull == Q3Shader::CULL_CW) {

+ 7 - 0
code/STLLoader.cpp

@@ -58,6 +58,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 using namespace Assimp;
 using namespace Assimp;
 
 
 namespace {
 namespace {
+    
 static const aiImporterDesc desc = {
 static const aiImporterDesc desc = {
     "Stereolithography (STL) Importer",
     "Stereolithography (STL) Importer",
     "",
     "",
@@ -505,6 +506,12 @@ bool STLImporter::LoadBinaryFile()
     // now copy faces
     // now copy faces
     addFacesToMesh(pMesh);
     addFacesToMesh(pMesh);
 
 
+    // add all created meshes to the single node
+    pScene->mRootNode->mNumMeshes = pScene->mNumMeshes;
+    pScene->mRootNode->mMeshes = new unsigned int[pScene->mNumMeshes];
+    for (unsigned int i = 0; i < pScene->mNumMeshes; i++)
+        pScene->mRootNode->mMeshes[i] = i;
+
     if (bIsMaterialise && !pMesh->mColors[0])
     if (bIsMaterialise && !pMesh->mColors[0])
     {
     {
         // use the color as diffuse material color
         // use the color as diffuse material color

+ 10 - 10
code/XGLLoader.cpp

@@ -359,7 +359,7 @@ void XGLImporter::ReadLighting(TempScope& scope)
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 aiLight* XGLImporter::ReadDirectionalLight()
 aiLight* XGLImporter::ReadDirectionalLight()
 {
 {
-    ScopeGuard<aiLight> l(new aiLight());
+    std::unique_ptr<aiLight> l(new aiLight());
     l->mType = aiLightSource_DIRECTIONAL;
     l->mType = aiLightSource_DIRECTIONAL;
 
 
     while (ReadElementUpToClosing("directionallight"))  {
     while (ReadElementUpToClosing("directionallight"))  {
@@ -374,13 +374,13 @@ aiLight* XGLImporter::ReadDirectionalLight()
             l->mColorSpecular = ReadCol3();
             l->mColorSpecular = ReadCol3();
         }
         }
     }
     }
-    return l.dismiss();
+    return l.release();
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 aiNode* XGLImporter::ReadObject(TempScope& scope, bool skipFirst, const char* closetag)
 aiNode* XGLImporter::ReadObject(TempScope& scope, bool skipFirst, const char* closetag)
 {
 {
-    ScopeGuard<aiNode> nd(new aiNode());
+    std::unique_ptr<aiNode> nd(new aiNode());
     std::vector<aiNode*> children;
     std::vector<aiNode*> children;
     std::vector<unsigned int> meshes;
     std::vector<unsigned int> meshes;
 
 
@@ -463,11 +463,11 @@ aiNode* XGLImporter::ReadObject(TempScope& scope, bool skipFirst, const char* cl
         nd->mChildren = new aiNode*[nd->mNumChildren]();
         nd->mChildren = new aiNode*[nd->mNumChildren]();
         for(unsigned int i = 0; i < nd->mNumChildren; ++i) {
         for(unsigned int i = 0; i < nd->mNumChildren; ++i) {
             nd->mChildren[i] = children[i];
             nd->mChildren[i] = children[i];
-            children[i]->mParent = nd;
+            children[i]->mParent = nd.get();
         }
         }
     }
     }
 
 
-    return nd.dismiss();
+    return nd.release();
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
@@ -539,7 +539,7 @@ aiMatrix4x4 XGLImporter::ReadTrafo()
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 aiMesh* XGLImporter::ToOutputMesh(const TempMaterialMesh& m)
 aiMesh* XGLImporter::ToOutputMesh(const TempMaterialMesh& m)
 {
 {
-    ScopeGuard<aiMesh> mesh(new aiMesh());
+    std::unique_ptr<aiMesh> mesh(new aiMesh());
 
 
     mesh->mNumVertices = static_cast<unsigned int>(m.positions.size());
     mesh->mNumVertices = static_cast<unsigned int>(m.positions.size());
     mesh->mVertices = new aiVector3D[mesh->mNumVertices];
     mesh->mVertices = new aiVector3D[mesh->mNumVertices];
@@ -576,7 +576,7 @@ aiMesh* XGLImporter::ToOutputMesh(const TempMaterialMesh& m)
 
 
     mesh->mPrimitiveTypes = m.pflags;
     mesh->mPrimitiveTypes = m.pflags;
     mesh->mMaterialIndex = m.matid;
     mesh->mMaterialIndex = m.matid;
-    return mesh.dismiss();
+    return mesh.release();
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
@@ -745,7 +745,7 @@ void XGLImporter::ReadMaterial(TempScope& scope)
 {
 {
     const unsigned int mat_id = ReadIDAttr();
     const unsigned int mat_id = ReadIDAttr();
 
 
-    ScopeGuard<aiMaterial> mat(new aiMaterial());
+    std::unique_ptr<aiMaterial> mat(new aiMaterial());
     while (ReadElementUpToClosing("mat"))  {
     while (ReadElementUpToClosing("mat"))  {
         const std::string& s = GetElementName();
         const std::string& s = GetElementName();
         if (s == "amb") {
         if (s == "amb") {
@@ -774,8 +774,8 @@ void XGLImporter::ReadMaterial(TempScope& scope)
         }
         }
     }
     }
 
 
-    scope.materials[mat_id] = mat;
-    scope.materials_linear.push_back(mat.dismiss());
+    scope.materials[mat_id] = mat.get();
+    scope.materials_linear.push_back(mat.release());
 }
 }
 
 
 
 

+ 0 - 3
contrib/zip/src/miniz.h

@@ -3807,9 +3807,7 @@ mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_ind
         status = TINFL_STATUS_FAILED;
         status = TINFL_STATUS_FAILED;
       else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
       else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
         file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)file_stat.m_comp_size);
         file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)file_stat.m_comp_size);
-      cur_file_ofs += file_stat.m_comp_size;
       out_buf_ofs += file_stat.m_comp_size;
       out_buf_ofs += file_stat.m_comp_size;
-      comp_remaining = 0;
     }
     }
     else
     else
     {
     {
@@ -4688,7 +4686,6 @@ mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *
       return MZ_FALSE;
       return MZ_FALSE;
     }
     }
 
 
-    cur_src_file_ofs += n;
     cur_dst_file_ofs += n;
     cur_dst_file_ofs += n;
   }
   }
   pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
   pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);