Merge pull request #4647 from sashashura/patch-5
Fixes Crash in Assimp::ObjFileMtlImporter::getFloatValuepull/4646/head^2
commit
316f6e841c
|
@ -126,17 +126,21 @@ void ObjFileMtlImporter::load() {
|
||||||
if (*m_DataIt == 'a') // Ambient color
|
if (*m_DataIt == 'a') // Ambient color
|
||||||
{
|
{
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getColorRGBA(&m_pModel->m_pCurrentMaterial->ambient);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getColorRGBA(&m_pModel->m_pCurrentMaterial->ambient);
|
||||||
} else if (*m_DataIt == 'd') {
|
} else if (*m_DataIt == 'd') {
|
||||||
// Diffuse color
|
// Diffuse color
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getColorRGBA(&m_pModel->m_pCurrentMaterial->diffuse);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getColorRGBA(&m_pModel->m_pCurrentMaterial->diffuse);
|
||||||
} else if (*m_DataIt == 's') {
|
} else if (*m_DataIt == 's') {
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getColorRGBA(&m_pModel->m_pCurrentMaterial->specular);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getColorRGBA(&m_pModel->m_pCurrentMaterial->specular);
|
||||||
} else if (*m_DataIt == 'e') {
|
} else if (*m_DataIt == 'e') {
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getColorRGBA(&m_pModel->m_pCurrentMaterial->emissive);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getColorRGBA(&m_pModel->m_pCurrentMaterial->emissive);
|
||||||
}
|
}
|
||||||
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
||||||
} break;
|
} break;
|
||||||
|
@ -145,13 +149,15 @@ void ObjFileMtlImporter::load() {
|
||||||
// Material transmission color
|
// Material transmission color
|
||||||
if (*m_DataIt == 'f') {
|
if (*m_DataIt == 'f') {
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getColorRGBA(&m_pModel->m_pCurrentMaterial->transparent);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getColorRGBA(&m_pModel->m_pCurrentMaterial->transparent);
|
||||||
} else if (*m_DataIt == 'r') {
|
} else if (*m_DataIt == 'r') {
|
||||||
// Material transmission alpha value
|
// Material transmission alpha value
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
ai_real d;
|
ai_real d;
|
||||||
getFloatValue(d);
|
getFloatValue(d);
|
||||||
m_pModel->m_pCurrentMaterial->alpha = static_cast<ai_real>(1.0) - d;
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
m_pModel->m_pCurrentMaterial->alpha = static_cast<ai_real>(1.0) - d;
|
||||||
}
|
}
|
||||||
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
||||||
} break;
|
} break;
|
||||||
|
@ -162,7 +168,8 @@ void ObjFileMtlImporter::load() {
|
||||||
} else {
|
} else {
|
||||||
// Alpha value
|
// Alpha value
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->alpha);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getFloatValue(m_pModel->m_pCurrentMaterial->alpha);
|
||||||
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
@ -173,11 +180,13 @@ void ObjFileMtlImporter::load() {
|
||||||
switch (*m_DataIt) {
|
switch (*m_DataIt) {
|
||||||
case 's': // Specular exponent
|
case 's': // Specular exponent
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->shineness);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getFloatValue(m_pModel->m_pCurrentMaterial->shineness);
|
||||||
break;
|
break;
|
||||||
case 'i': // Index Of refraction
|
case 'i': // Index Of refraction
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->ior);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getFloatValue(m_pModel->m_pCurrentMaterial->ior);
|
||||||
break;
|
break;
|
||||||
case 'e': // New material
|
case 'e': // New material
|
||||||
createMaterial();
|
createMaterial();
|
||||||
|
@ -197,23 +206,28 @@ void ObjFileMtlImporter::load() {
|
||||||
{
|
{
|
||||||
case 'r':
|
case 'r':
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->roughness);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getFloatValue(m_pModel->m_pCurrentMaterial->roughness);
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->metallic);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getFloatValue(m_pModel->m_pCurrentMaterial->metallic);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getColorRGBA(m_pModel->m_pCurrentMaterial->sheen);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getColorRGBA(m_pModel->m_pCurrentMaterial->sheen);
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
if (*m_DataIt == 'r') {
|
if (*m_DataIt == 'r') {
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->clearcoat_roughness);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getFloatValue(m_pModel->m_pCurrentMaterial->clearcoat_roughness);
|
||||||
} else {
|
} else {
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->clearcoat_thickness);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getFloatValue(m_pModel->m_pCurrentMaterial->clearcoat_thickness);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -232,7 +246,8 @@ void ObjFileMtlImporter::load() {
|
||||||
case 'i': // Illumination model
|
case 'i': // Illumination model
|
||||||
{
|
{
|
||||||
m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
|
m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
|
||||||
getIlluminationModel(m_pModel->m_pCurrentMaterial->illumination_model);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
getIlluminationModel(m_pModel->m_pCurrentMaterial->illumination_model);
|
||||||
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
@ -240,7 +255,8 @@ void ObjFileMtlImporter::load() {
|
||||||
{
|
{
|
||||||
++m_DataIt;
|
++m_DataIt;
|
||||||
getFloatValue(m_pModel->m_pCurrentMaterial->anisotropy);
|
getFloatValue(m_pModel->m_pCurrentMaterial->anisotropy);
|
||||||
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
if (m_pModel->m_pCurrentMaterial != nullptr)
|
||||||
|
m_DataIt = skipLine<DataArrayIt>(m_DataIt, m_DataItEnd, m_uiLine);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
|
|
Loading…
Reference in New Issue