Bugfix : Fixed the Subdivision input mesh to be non-const. ( merged from GitHub, thanks to Riku Palomäki ).
git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1221 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
This commit is contained in:
@@ -52,15 +52,15 @@ void mydummy() {}
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
/** Subdivider stub class to implement the Catmull-Clarke subdivision algorithm. The
|
||||
* implementation is basing on recursive refinement. Directly evaluating the result is also
|
||||
* possibel and much quicker, but it depends on lengthy matrix lookup tables. */
|
||||
* possible and much quicker, but it depends on lengthy matrix lookup tables. */
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
class CatmullClarkSubdivider : public Subdivider
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
void Subdivide (const aiMesh* mesh, aiMesh*& out, unsigned int num, bool discard_input);
|
||||
void Subdivide (const aiMesh* const * smesh, size_t nmesh,
|
||||
void Subdivide (aiMesh* mesh, aiMesh*& out, unsigned int num, bool discard_input);
|
||||
void Subdivide (aiMesh** smesh, size_t nmesh,
|
||||
aiMesh** out, unsigned int num, bool discard_input);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -123,7 +123,7 @@ Subdivider* Subdivider::Create (Algorithm algo)
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Call the Catmull Clark subdivision algorithm for one mesh
|
||||
void CatmullClarkSubdivider::Subdivide (
|
||||
const aiMesh* mesh,
|
||||
aiMesh* mesh,
|
||||
aiMesh*& out,
|
||||
unsigned int num,
|
||||
bool discard_input
|
||||
@@ -136,7 +136,7 @@ void CatmullClarkSubdivider::Subdivide (
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Call the Catmull Clark subdivision algorithm for multiple meshes
|
||||
void CatmullClarkSubdivider::Subdivide (
|
||||
const aiMesh* const * smesh,
|
||||
aiMesh** smesh,
|
||||
size_t nmesh,
|
||||
aiMesh** out,
|
||||
unsigned int num,
|
||||
@@ -152,8 +152,8 @@ void CatmullClarkSubdivider::Subdivide (
|
||||
// No subdivision at all. Need to copy all the meshes .. argh.
|
||||
if (discard_input) {
|
||||
for (size_t s = 0; s < nmesh; ++s) {
|
||||
out[s] = const_cast<aiMesh*>( smesh[s] );
|
||||
const_cast<aiMesh*&>( smesh[s] ) = NULL;
|
||||
out[s] = smesh[s];
|
||||
smesh[s] = NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -164,7 +164,7 @@ void CatmullClarkSubdivider::Subdivide (
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<const aiMesh*> inmeshes;
|
||||
std::vector<aiMesh*> inmeshes;
|
||||
std::vector<aiMesh*> outmeshes;
|
||||
std::vector<unsigned int> maptbl;
|
||||
|
||||
@@ -176,14 +176,14 @@ void CatmullClarkSubdivider::Subdivide (
|
||||
// number of edge cases the subdivider is forced to deal with. Line and
|
||||
// point meshes are simply passed through.
|
||||
for (size_t s = 0; s < nmesh; ++s) {
|
||||
const aiMesh* i = smesh[s];
|
||||
aiMesh* i = smesh[s];
|
||||
// FIX - mPrimitiveTypes might not yet be initialized
|
||||
if (i->mPrimitiveTypes && (i->mPrimitiveTypes & (aiPrimitiveType_LINE|aiPrimitiveType_POINT))==i->mPrimitiveTypes) {
|
||||
DefaultLogger::get()->debug("Catmull-Clark Subdivider: Skipping pure line/point mesh");
|
||||
|
||||
if (discard_input) {
|
||||
out[s] = const_cast<aiMesh*>( i );
|
||||
const_cast<aiMesh*&>( smesh[s] ) = NULL;
|
||||
out[s] = i;
|
||||
smesh[s] = NULL;
|
||||
}
|
||||
else {
|
||||
SceneCombiner::Copy(out+s,i);
|
||||
|
||||
Reference in New Issue
Block a user