do not try to load empty texture

This commit is contained in:
yangxiao 2014-12-23 15:52:45 +08:00
parent 7a332aef04
commit 908b9e470d
2 changed files with 13 additions and 10 deletions

View File

@ -280,7 +280,7 @@ bool Bundle3D::loadObj(MeshDatas& meshdatas, MaterialDatas& materialdatas, NodeD
for (const auto& it : shapes.shapes) for (const auto& it : shapes.shapes)
{ {
NTextureData tex; NTextureData tex;
tex.filename = dir + it.material.diffuse_texname; tex.filename = it.material.diffuse_texname.empty() ? it.material.diffuse_texname : dir + it.material.diffuse_texname;
tex.type = NTextureData::Usage::Diffuse; tex.type = NTextureData::Usage::Diffuse;
tex.wrapS = GL_CLAMP_TO_EDGE; tex.wrapS = GL_CLAMP_TO_EDGE;
tex.wrapT = GL_CLAMP_TO_EDGE; tex.wrapT = GL_CLAMP_TO_EDGE;
@ -855,7 +855,7 @@ bool Bundle3D::loadMaterialsBinary(MaterialDatas& materialdatas)
return false; return false;
} }
textureData.filename = _modelPath + texturePath; textureData.filename = texturePath.empty() ? texturePath : _modelPath + texturePath;
float uvdata[4]; float uvdata[4];
_binaryReader.read(&uvdata,sizeof(float), 4); _binaryReader.read(&uvdata,sizeof(float), 4);
textureData.type = parseGLTextureType(_binaryReader.readString()); textureData.type = parseGLTextureType(_binaryReader.readString());
@ -882,7 +882,7 @@ bool Bundle3D::loadMaterialsBinary_0_1(MaterialDatas& materialdatas)
} }
NTextureData textureData; NTextureData textureData;
textureData.filename = _modelPath + texturePath; textureData.filename = texturePath.empty() ? texturePath : _modelPath + texturePath;
textureData.type= NTextureData::Usage::Diffuse; textureData.type= NTextureData::Usage::Diffuse;
textureData.id=""; textureData.id="";
materialData.textures.push_back(textureData); materialData.textures.push_back(textureData);
@ -910,7 +910,7 @@ bool Bundle3D::loadMaterialsBinary_0_2(MaterialDatas& materialdatas)
} }
NTextureData textureData; NTextureData textureData;
textureData.filename = _modelPath + texturePath; textureData.filename = texturePath.empty() ? texturePath : _modelPath + texturePath;
textureData.type= NTextureData::Usage::Diffuse; textureData.type= NTextureData::Usage::Diffuse;
textureData.id=""; textureData.id="";
materialData.textures.push_back(textureData); materialData.textures.push_back(textureData);
@ -936,7 +936,7 @@ bool Bundle3D::loadMaterialsJson(MaterialDatas& materialdatas)
NTextureData textureData; NTextureData textureData;
const rapidjson::Value& texture_val = testure_array[j]; const rapidjson::Value& texture_val = testure_array[j];
std::string filename = texture_val[FILENAME].GetString(); std::string filename = texture_val[FILENAME].GetString();
textureData.filename = _modelPath + filename; textureData.filename = filename.empty() ? filename : _modelPath + filename;
textureData.type = parseGLTextureType(texture_val["type"].GetString()); textureData.type = parseGLTextureType(texture_val["type"].GetString());
textureData.wrapS = parseGLType(texture_val["wrapModeU"].GetString()); textureData.wrapS = parseGLType(texture_val["wrapModeU"].GetString());
textureData.wrapT = parseGLType(texture_val["wrapModeV"].GetString()); textureData.wrapT = parseGLType(texture_val["wrapModeV"].GetString());
@ -1301,7 +1301,8 @@ bool Bundle3D::loadMaterialDataJson_0_1(MaterialDatas& materialdatas)
const rapidjson::Value& material_data_base_array_0 = material_data_base_array[(rapidjson::SizeType)0]; const rapidjson::Value& material_data_base_array_0 = material_data_base_array[(rapidjson::SizeType)0];
NTextureData textureData; NTextureData textureData;
// set texture // set texture
textureData.filename =_modelPath + material_data_base_array_0[FILENAME].GetString(); std::string filename = material_data_base_array_0[FILENAME].GetString();
textureData.filename = filename.empty() ? filename : _modelPath + filename;
textureData.type= NTextureData::Usage::Diffuse; textureData.type= NTextureData::Usage::Diffuse;
textureData.id=""; textureData.id="";
materialData.textures.push_back(textureData); materialData.textures.push_back(textureData);
@ -1325,7 +1326,8 @@ bool Bundle3D::loadMaterialDataJson_0_2(MaterialDatas& materialdatas)
const rapidjson::Value& material_val = material_array[i]; const rapidjson::Value& material_val = material_array[i];
// set texture // set texture
textureData.filename = _modelPath + material_val[TEXTURES].GetString(); std::string filename = material_val[TEXTURES].GetString();
textureData.filename = filename.empty() ? filename : _modelPath + filename;
textureData.type= NTextureData::Usage::Diffuse; textureData.type= NTextureData::Usage::Diffuse;
textureData.id=""; textureData.id="";
materialData.textures.push_back(textureData); materialData.textures.push_back(textureData);

View File

@ -258,7 +258,8 @@ Sprite3D* Sprite3D::createSprite3DNode(NodeData* nodedata,ModelData* modeldata,c
if (modeldata->matrialId == "" && matrialdatas.materials.size()) if (modeldata->matrialId == "" && matrialdatas.materials.size())
{ {
const NTextureData* textureData = matrialdatas.materials[0].getTextureData(NTextureData::Usage::Diffuse); const NTextureData* textureData = matrialdatas.materials[0].getTextureData(NTextureData::Usage::Diffuse);
mesh->setTexture(textureData->filename); if (!textureData->filename.empty())
mesh->setTexture(textureData->filename);
} }
else else
{ {
@ -266,7 +267,7 @@ Sprite3D* Sprite3D::createSprite3DNode(NodeData* nodedata,ModelData* modeldata,c
if(materialData) if(materialData)
{ {
const NTextureData* textureData = materialData->getTextureData(NTextureData::Usage::Diffuse); const NTextureData* textureData = materialData->getTextureData(NTextureData::Usage::Diffuse);
if(textureData) if(textureData && !textureData->filename.empty())
{ {
auto tex = Director::getInstance()->getTextureCache()->addImage(textureData->filename); auto tex = Director::getInstance()->getTextureCache()->addImage(textureData->filename);
if(tex) if(tex)
@ -401,7 +402,7 @@ void Sprite3D::createNode(NodeData* nodedata, Node* root, const MaterialDatas& m
if(materialData) if(materialData)
{ {
const NTextureData* textureData = materialData->getTextureData(NTextureData::Usage::Diffuse); const NTextureData* textureData = materialData->getTextureData(NTextureData::Usage::Diffuse);
if(textureData) if(textureData && !textureData->filename.empty())
{ {
auto tex = Director::getInstance()->getTextureCache()->addImage(textureData->filename); auto tex = Director::getInstance()->getTextureCache()->addImage(textureData->filename);
if(tex) if(tex)