Merge branch 'master' of github.com:assimp/assimp
commit
7a4edbd126
|
@ -73,6 +73,7 @@ ASSIMP_API void aiCopyScene(const aiScene* pIn, aiScene** pOut)
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneCombiner::CopyScene(pOut,pIn,true);
|
SceneCombiner::CopyScene(pOut,pIn,true);
|
||||||
|
ScenePriv(*pOut)->mIsCopy = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -289,15 +289,16 @@ aiReturn Exporter :: Export( const aiScene* pScene, const char* pFormatId, const
|
||||||
const unsigned int nonIdempotentSteps = aiProcess_FlipWindingOrder | aiProcess_FlipUVs | aiProcess_MakeLeftHanded;
|
const unsigned int nonIdempotentSteps = aiProcess_FlipWindingOrder | aiProcess_FlipUVs | aiProcess_MakeLeftHanded;
|
||||||
|
|
||||||
// Erase all pp steps that were already applied to this scene
|
// Erase all pp steps that were already applied to this scene
|
||||||
unsigned int pp = (exp.mEnforcePP | pPreprocessing) & ~(priv
|
const unsigned int pp = (exp.mEnforcePP | pPreprocessing) & ~(priv && !priv->mIsCopy
|
||||||
? (priv->mPPStepsApplied & ~nonIdempotentSteps)
|
? (priv->mPPStepsApplied & ~nonIdempotentSteps)
|
||||||
: 0u);
|
: 0u);
|
||||||
|
|
||||||
// If no extra postprocessing was specified, and we obtained this scene from an
|
// If no extra postprocessing was specified, and we obtained this scene from an
|
||||||
// Assimp importer, apply the reverse steps automatically.
|
// Assimp importer, apply the reverse steps automatically.
|
||||||
if (!pPreprocessing && priv) {
|
// TODO: either drop this, or document it. Otherwise it is just a bad surprise.
|
||||||
pp |= (nonIdempotentSteps & priv->mPPStepsApplied);
|
//if (!pPreprocessing && priv) {
|
||||||
}
|
// pp |= (nonIdempotentSteps & priv->mPPStepsApplied);
|
||||||
|
//}
|
||||||
|
|
||||||
// If the input scene is not in verbose format, but there is at least postprocessing step that relies on it,
|
// If the input scene is not in verbose format, but there is at least postprocessing step that relies on it,
|
||||||
// we need to run the MakeVerboseFormat step first.
|
// we need to run the MakeVerboseFormat step first.
|
||||||
|
|
|
@ -53,6 +53,7 @@ struct ScenePrivateData {
|
||||||
ScenePrivateData()
|
ScenePrivateData()
|
||||||
: mOrigImporter()
|
: mOrigImporter()
|
||||||
, mPPStepsApplied()
|
, mPPStepsApplied()
|
||||||
|
, mIsCopy()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// Importer that originally loaded the scene though the C-API
|
// Importer that originally loaded the scene though the C-API
|
||||||
|
@ -61,6 +62,13 @@ struct ScenePrivateData {
|
||||||
|
|
||||||
// List of postprocessing steps already applied to the scene.
|
// List of postprocessing steps already applied to the scene.
|
||||||
unsigned int mPPStepsApplied;
|
unsigned int mPPStepsApplied;
|
||||||
|
|
||||||
|
// true if the scene is a copy made with aiCopyScene()
|
||||||
|
// or the corresponding C++ API. This means that user code
|
||||||
|
// may have made modifications to it, so mPPStepsApplied
|
||||||
|
// and mOrigImporter are no longer safe to rely on and only
|
||||||
|
// serve informative purposes.
|
||||||
|
bool mIsCopy;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Access private data stored in the scene
|
// Access private data stored in the scene
|
||||||
|
|
|
@ -198,7 +198,13 @@ public:
|
||||||
* redundant as exporters would apply them anyhow. A good example
|
* redundant as exporters would apply them anyhow. A good example
|
||||||
* is triangulation - whilst you can enforce it by specifying
|
* is triangulation - whilst you can enforce it by specifying
|
||||||
* the #aiProcess_Triangulate flag, most export formats support only
|
* the #aiProcess_Triangulate flag, most export formats support only
|
||||||
* triangulate data so they would run the step even if it wasn't requested.
|
* triangulate data so they would run the step even if it wasn't requested.
|
||||||
|
*
|
||||||
|
* If assimp detects that the input scene was directly taken from the importer side of
|
||||||
|
* the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
|
||||||
|
* any postprocessing steps already applied to the scene will not be applied again, unless
|
||||||
|
* they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
||||||
|
* #aiProcess_FlipWindingOrder).
|
||||||
* @return AI_SUCCESS if everything was fine.
|
* @return AI_SUCCESS if everything was fine.
|
||||||
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
||||||
* imported scene.*/
|
* imported scene.*/
|
||||||
|
|
|
@ -143,6 +143,12 @@ ASSIMP_API void aiFreeScene(const C_STRUCT aiScene* pIn);
|
||||||
* is triangulation - whilst you can enforce it by specifying
|
* is triangulation - whilst you can enforce it by specifying
|
||||||
* the #aiProcess_Triangulate flag, most export formats support only
|
* the #aiProcess_Triangulate flag, most export formats support only
|
||||||
* triangulate data so they would run the step anyway.
|
* triangulate data so they would run the step anyway.
|
||||||
|
*
|
||||||
|
* If assimp detects that the input scene was directly taken from the importer side of
|
||||||
|
* the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
|
||||||
|
* any postprocessing steps already applied to the scene will not be applied again, unless
|
||||||
|
* they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
||||||
|
* #aiProcess_FlipWindingOrder).
|
||||||
* @return a status code indicating the result of the export
|
* @return a status code indicating the result of the export
|
||||||
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
||||||
* imported scene.
|
* imported scene.
|
||||||
|
|
Loading…
Reference in New Issue