commit
d2a6bb15c2
|
@ -168,7 +168,7 @@ void MMDImporter::CreateDataFromImport(const pmx::PmxModel *pModel,
|
||||||
}
|
}
|
||||||
|
|
||||||
// create node hierarchy for bone position
|
// create node hierarchy for bone position
|
||||||
aiNode **ppNode = new aiNode *[pModel->bone_count];
|
std::unique_ptr<aiNode *[]> ppNode(new aiNode *[pModel->bone_count]);
|
||||||
for (auto i = 0; i < pModel->bone_count; i++) {
|
for (auto i = 0; i < pModel->bone_count; i++) {
|
||||||
ppNode[i] = new aiNode(pModel->bones[i].bone_name);
|
ppNode[i] = new aiNode(pModel->bones[i].bone_name);
|
||||||
}
|
}
|
||||||
|
@ -177,9 +177,9 @@ void MMDImporter::CreateDataFromImport(const pmx::PmxModel *pModel,
|
||||||
const pmx::PmxBone &bone = pModel->bones[i];
|
const pmx::PmxBone &bone = pModel->bones[i];
|
||||||
|
|
||||||
if (bone.parent_index < 0) {
|
if (bone.parent_index < 0) {
|
||||||
pScene->mRootNode->addChildren(1, ppNode + i);
|
pScene->mRootNode->addChildren(1, ppNode.get() + i);
|
||||||
} else {
|
} else {
|
||||||
ppNode[bone.parent_index]->addChildren(1, ppNode + i);
|
ppNode[bone.parent_index]->addChildren(1, ppNode.get() + i);
|
||||||
|
|
||||||
aiVector3D v3 = aiVector3D(
|
aiVector3D v3 = aiVector3D(
|
||||||
bone.position[0] - pModel->bones[bone.parent_index].position[0],
|
bone.position[0] - pModel->bones[bone.parent_index].position[0],
|
||||||
|
@ -324,8 +324,10 @@ aiMesh *MMDImporter::CreateMesh(const pmx::PmxModel *pModel,
|
||||||
auto it = bone_vertex_map.find(ii);
|
auto it = bone_vertex_map.find(ii);
|
||||||
if (it != bone_vertex_map.end()) {
|
if (it != bone_vertex_map.end()) {
|
||||||
pBone->mNumWeights = static_cast<unsigned int>(it->second.size());
|
pBone->mNumWeights = static_cast<unsigned int>(it->second.size());
|
||||||
pBone->mWeights = it->second.data();
|
pBone->mWeights = new aiVertexWeight[pBone->mNumWeights];
|
||||||
it->second.swap(*(new vector<aiVertexWeight>));
|
for (unsigned int j = 0; j < pBone->mNumWeights; j++) {
|
||||||
|
pBone->mWeights[j] = it->second[j];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bone_ptr_ptr[ii] = pBone;
|
bone_ptr_ptr[ii] = pBone;
|
||||||
}
|
}
|
||||||
|
|
|
@ -649,7 +649,7 @@ namespace glTF
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t* mData;
|
std::unique_ptr<uint8_t[]> mData;
|
||||||
size_t mDataLength;
|
size_t mDataLength;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -664,7 +664,7 @@ namespace glTF
|
||||||
{ return mDataLength; }
|
{ return mDataLength; }
|
||||||
|
|
||||||
inline const uint8_t* GetData() const
|
inline const uint8_t* GetData() const
|
||||||
{ return mData; }
|
{ return mData.get(); }
|
||||||
|
|
||||||
inline uint8_t* StealData();
|
inline uint8_t* StealData();
|
||||||
|
|
||||||
|
|
|
@ -297,7 +297,7 @@ inline void Buffer::Read(Value& obj, Asset& r)
|
||||||
if (dataURI.base64) {
|
if (dataURI.base64) {
|
||||||
uint8_t* data = 0;
|
uint8_t* data = 0;
|
||||||
this->byteLength = Util::DecodeBase64(dataURI.data, dataURI.dataLength, data);
|
this->byteLength = Util::DecodeBase64(dataURI.data, dataURI.dataLength, data);
|
||||||
this->mData.reset(data);
|
this->mData.reset(data, std::default_delete<uint8_t[]>());
|
||||||
|
|
||||||
if (statedLength > 0 && this->byteLength != statedLength) {
|
if (statedLength > 0 && this->byteLength != statedLength) {
|
||||||
throw DeadlyImportError("GLTF: buffer \"" + id + "\", expected " + to_string(statedLength) +
|
throw DeadlyImportError("GLTF: buffer \"" + id + "\", expected " + to_string(statedLength) +
|
||||||
|
@ -601,7 +601,6 @@ T Accessor::Indexer::GetValue(int i)
|
||||||
inline Image::Image()
|
inline Image::Image()
|
||||||
: width(0)
|
: width(0)
|
||||||
, height(0)
|
, height(0)
|
||||||
, mData(0)
|
|
||||||
, mDataLength(0)
|
, mDataLength(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -624,8 +623,8 @@ inline void Image::Read(Value& obj, Asset& r)
|
||||||
Ref<BufferView> bv = r.bufferViews.Get(bufferViewId);
|
Ref<BufferView> bv = r.bufferViews.Get(bufferViewId);
|
||||||
if (bv) {
|
if (bv) {
|
||||||
mDataLength = bv->byteLength;
|
mDataLength = bv->byteLength;
|
||||||
mData = new uint8_t[mDataLength];
|
mData.reset(new uint8_t[mDataLength]);
|
||||||
memcpy(mData, bv->buffer->GetPointer() + bv->byteOffset, mDataLength);
|
memcpy(mData.get(), bv->buffer->GetPointer() + bv->byteOffset, mDataLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -640,7 +639,9 @@ inline void Image::Read(Value& obj, Asset& r)
|
||||||
if (ParseDataURI(uristr, uri->GetStringLength(), dataURI)) {
|
if (ParseDataURI(uristr, uri->GetStringLength(), dataURI)) {
|
||||||
mimeType = dataURI.mediaType;
|
mimeType = dataURI.mediaType;
|
||||||
if (dataURI.base64) {
|
if (dataURI.base64) {
|
||||||
mDataLength = Util::DecodeBase64(dataURI.data, dataURI.dataLength, mData);
|
uint8_t *ptr = nullptr;
|
||||||
|
mDataLength = Util::DecodeBase64(dataURI.data, dataURI.dataLength, ptr);
|
||||||
|
mData.reset(ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -652,10 +653,8 @@ inline void Image::Read(Value& obj, Asset& r)
|
||||||
|
|
||||||
inline uint8_t* Image::StealData()
|
inline uint8_t* Image::StealData()
|
||||||
{
|
{
|
||||||
uint8_t* data = mData;
|
|
||||||
mDataLength = 0;
|
mDataLength = 0;
|
||||||
mData = 0;
|
return mData.release();
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Image::SetData(uint8_t* data, size_t length, Asset& r)
|
inline void Image::SetData(uint8_t* data, size_t length, Asset& r)
|
||||||
|
@ -670,7 +669,7 @@ inline void Image::SetData(uint8_t* data, size_t length, Asset& r)
|
||||||
bufferView->byteOffset = b->AppendData(data, length);
|
bufferView->byteOffset = b->AppendData(data, length);
|
||||||
}
|
}
|
||||||
else { // text file: will be stored as a data uri
|
else { // text file: will be stored as a data uri
|
||||||
this->mData = data;
|
this->mData.reset(data);
|
||||||
this->mDataLength = length;
|
this->mDataLength = length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -616,7 +616,7 @@ void glTFImporter::ImportEmbeddedTextures(glTF::Asset& r)
|
||||||
|
|
||||||
// Add the embedded textures
|
// Add the embedded textures
|
||||||
for (size_t i = 0; i < r.images.Size(); ++i) {
|
for (size_t i = 0; i < r.images.Size(); ++i) {
|
||||||
Image img = r.images[i];
|
Image &img = r.images[i];
|
||||||
if (!img.HasData()) continue;
|
if (!img.HasData()) continue;
|
||||||
|
|
||||||
int idx = mScene->mNumTextures++;
|
int idx = mScene->mNumTextures++;
|
||||||
|
|
Loading…
Reference in New Issue