This commit is contained in:
Howard Stearns 2016-03-15 20:31:57 -07:00
parent d1d8e6cb22
commit 76b5b6aeeb

View file

@ -178,6 +178,13 @@ void OBJFace::addFrom(const OBJFace* face, int index) { // add using data from f
} }
} }
static bool replyOK(QNetworkReply* netReply, QUrl url) { // This will be reworked when we make things asynchronous
return netReply->isFinished() &&
(url.toString().startsWith("file", Qt::CaseInsensitive) ? // file urls don't have http status codes
netReply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString().isEmpty() :
(netReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200));
}
bool OBJReader::isValidTexture(const QByteArray &filename) { bool OBJReader::isValidTexture(const QByteArray &filename) {
if (_url.isEmpty()) { if (_url.isEmpty()) {
return false; return false;
@ -187,14 +194,11 @@ bool OBJReader::isValidTexture(const QByteArray &filename) {
if (!netReply) { if (!netReply) {
return false; return false;
} }
bool isValid = netReply->isFinished() && (netReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200); bool isValid = replyOK(netReply, candidateUrl);
netReply->deleteLater(); netReply->deleteLater();
return isValid; return isValid;
} }
//FIXME
#define WANT_DEBUG 1
void OBJReader::parseMaterialLibrary(QIODevice* device) { void OBJReader::parseMaterialLibrary(QIODevice* device) {
OBJTokenizer tokenizer(device); OBJTokenizer tokenizer(device);
QString matName = SMART_DEFAULT_MATERIAL_NAME; QString matName = SMART_DEFAULT_MATERIAL_NAME;
@ -347,12 +351,12 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi
break; break;
} }
QString nextName = tokenizer.getDatum(); QString nextName = tokenizer.getDatum();
#ifdef WANT_DEBUG
if (nextName != currentMaterialName) { if (nextName != currentMaterialName) {
currentMaterialName = nextName; currentMaterialName = nextName;
#ifdef WANT_DEBUG
qCDebug(modelformat) << "OBJ Reader new current material:" << currentMaterialName; qCDebug(modelformat) << "OBJ Reader new current material:" << currentMaterialName;
#endif
} }
#endif
} else if (token == "v") { } else if (token == "v") {
vertices.append(tokenizer.getVec3()); vertices.append(tokenizer.getVec3());
} else if (token == "vn") { } else if (token == "vn") {
@ -561,21 +565,14 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping,
foreach (QString libraryName, librariesSeen.keys()) { foreach (QString libraryName, librariesSeen.keys()) {
// Throw away any path part of libraryName, and merge against original url. // Throw away any path part of libraryName, and merge against original url.
QUrl libraryUrl = _url.resolved(QUrl(libraryName).fileName()); QUrl libraryUrl = _url.resolved(QUrl(libraryName).fileName());
#ifdef WANT_DEBUG
qCDebug(modelformat) << "OBJ Reader material library" << libraryName << "used in" << _url; qCDebug(modelformat) << "OBJ Reader material library" << libraryName << "used in" << _url;
#endif
QNetworkReply* netReply = request(libraryUrl, false); QNetworkReply* netReply = request(libraryUrl, false);
if (netReply->isFinished() && if (replyOK(netReply, libraryUrl)) {
(libraryUrl.toString().startsWith("file", Qt::CaseInsensitive) ? // file urls don't have http status codes parseMaterialLibrary(netReply);
netReply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString().isEmpty() : } else {
(netReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200))) { qCDebug(modelformat) << "OBJ Reader WARNING:" << libraryName << "did not answer. Got"
parseMaterialLibrary(netReply);
} else {
#ifdef WANT_DEBUG
qCDebug(modelformat) << "OBJ Reader" << libraryName << "did not answer. Got"
<< netReply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); << netReply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
#endif }
}
netReply->deleteLater(); netReply->deleteLater();
} }
} }
@ -583,9 +580,7 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping,
foreach (QString materialID, materials.keys()) { foreach (QString materialID, materials.keys()) {
OBJMaterial& objMaterial = materials[materialID]; OBJMaterial& objMaterial = materials[materialID];
if (!objMaterial.used) { if (!objMaterial.used) {
qCDebug(modelformat) << "fixme skipping" << materialID;
continue; continue;
assert(false);
} }
geometry.materials[materialID] = FBXMaterial(objMaterial.diffuseColor, geometry.materials[materialID] = FBXMaterial(objMaterial.diffuseColor,
objMaterial.specularColor, objMaterial.specularColor,