fix materialJSON paths in domain baker

This commit is contained in:
SamGondelman 2019-04-16 10:30:09 -07:00
parent db9df76337
commit 23918258d9
4 changed files with 12 additions and 10 deletions

View file

@ -27,9 +27,10 @@ std::function<QThread*()> MaterialBaker::_getNextOvenWorkerThreadOperator;
static int materialNum = 0; static int materialNum = 0;
MaterialBaker::MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir) : MaterialBaker::MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir, QUrl destinationPath) :
_materialData(materialData), _materialData(materialData),
_isURL(isURL), _isURL(isURL),
_destinationPath(destinationPath),
_bakedOutputDir(bakedOutputDir), _bakedOutputDir(bakedOutputDir),
_textureOutputDir(bakedOutputDir + "/materialTextures/" + QString::number(materialNum++)) _textureOutputDir(bakedOutputDir + "/materialTextures/" + QString::number(materialNum++))
{ {
@ -177,6 +178,10 @@ void MaterialBaker::handleFinishedTextureBaker() {
auto newURL = QUrl(_textureOutputDir).resolved(baker->getMetaTextureFileName()); auto newURL = QUrl(_textureOutputDir).resolved(baker->getMetaTextureFileName());
auto relativeURL = QDir(_bakedOutputDir).relativeFilePath(newURL.toString()); auto relativeURL = QDir(_bakedOutputDir).relativeFilePath(newURL.toString());
if (!_destinationPath.isEmpty()) {
relativeURL = _destinationPath.resolved(relativeURL).toDisplayString();
}
// Replace the old texture URLs // Replace the old texture URLs
for (auto networkMaterial : _materialsNeedingRewrite.values(textureKey)) { for (auto networkMaterial : _materialsNeedingRewrite.values(textureKey)) {
networkMaterial->getTextureMap(baker->getMapChannel())->getTextureSource()->setUrl(relativeURL); networkMaterial->getTextureMap(baker->getMapChannel())->getTextureSource()->setUrl(relativeURL);

View file

@ -24,7 +24,7 @@ static const QString BAKED_MATERIAL_EXTENSION = ".baked.json";
class MaterialBaker : public Baker { class MaterialBaker : public Baker {
Q_OBJECT Q_OBJECT
public: public:
MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir); MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir, QUrl destinationPath = QUrl());
QString getMaterialData() const { return _materialData; } QString getMaterialData() const { return _materialData; }
bool isURL() const { return _isURL; } bool isURL() const { return _isURL; }
@ -51,6 +51,7 @@ private:
QString _materialData; QString _materialData;
bool _isURL; bool _isURL;
QUrl _destinationPath;
NetworkMaterialResourcePointer _materialResource; NetworkMaterialResourcePointer _materialResource;

View file

@ -258,7 +258,7 @@ void DomainBaker::addScriptBaker(const QString& property, const QString& url, co
_entitiesNeedingRewrite.insert(scriptURL, { property, jsonRef }); _entitiesNeedingRewrite.insert(scriptURL, { property, jsonRef });
} }
void DomainBaker::addMaterialBaker(const QString& property, const QString& data, bool isURL, const QJsonValueRef& jsonRef) { void DomainBaker::addMaterialBaker(const QString& property, const QString& data, bool isURL, const QJsonValueRef& jsonRef, QUrl destinationPath) {
// grab a clean version of the URL without a query or fragment // grab a clean version of the URL without a query or fragment
QString materialData; QString materialData;
if (isURL) { if (isURL) {
@ -272,7 +272,7 @@ void DomainBaker::addMaterialBaker(const QString& property, const QString& data,
// setup a baker for this material // setup a baker for this material
QSharedPointer<MaterialBaker> materialBaker { QSharedPointer<MaterialBaker> materialBaker {
new MaterialBaker(data, isURL, _contentOutputPath), new MaterialBaker(data, isURL, _contentOutputPath, destinationPath),
&MaterialBaker::deleteLater &MaterialBaker::deleteLater
}; };
@ -412,13 +412,9 @@ void DomainBaker::enumerateEntities() {
if (entity.contains(MATERIAL_URL_KEY)) { if (entity.contains(MATERIAL_URL_KEY)) {
addMaterialBaker(MATERIAL_URL_KEY, entity[MATERIAL_URL_KEY].toString(), true, *it); addMaterialBaker(MATERIAL_URL_KEY, entity[MATERIAL_URL_KEY].toString(), true, *it);
} }
// FIXME: Disabled for now because relative texture URLs are not supported for embedded materials in material entities
// We need to make texture URLs absolute in this particular case only, keeping in mind that FSTBaker also uses embedded materials
/*
if (entity.contains(MATERIAL_DATA_KEY)) { if (entity.contains(MATERIAL_DATA_KEY)) {
addMaterialBaker(MATERIAL_DATA_KEY, entity[MATERIAL_DATA_KEY].toString(), false, *it); addMaterialBaker(MATERIAL_DATA_KEY, entity[MATERIAL_DATA_KEY].toString(), false, *it, _destinationPath);
} }
*/
} }
} }

View file

@ -76,7 +76,7 @@ private:
void addModelBaker(const QString& property, const QString& url, const QJsonValueRef& jsonRef); void addModelBaker(const QString& property, const QString& url, const QJsonValueRef& jsonRef);
void addTextureBaker(const QString& property, const QString& url, image::TextureUsage::Type type, const QJsonValueRef& jsonRef); void addTextureBaker(const QString& property, const QString& url, image::TextureUsage::Type type, const QJsonValueRef& jsonRef);
void addScriptBaker(const QString& property, const QString& url, const QJsonValueRef& jsonRef); void addScriptBaker(const QString& property, const QString& url, const QJsonValueRef& jsonRef);
void addMaterialBaker(const QString& property, const QString& data, bool isURL, const QJsonValueRef& jsonRef); void addMaterialBaker(const QString& property, const QString& data, bool isURL, const QJsonValueRef& jsonRef, QUrl destinationPath = QUrl());
}; };
#endif // hifi_DomainBaker_h #endif // hifi_DomainBaker_h