// // ModelBaker.h // libraries/baking/src // // Created by Utkarsh Gautam on 9/29/17. // Copyright 2017 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #ifndef hifi_ModelBaker_h #define hifi_ModelBaker_h #include #include #include #include #include "Baker.h" #include "TextureBaker.h" #include "ModelBakingLoggingCategory.h" #include #include #include using TextureBakerThreadGetter = std::function; using GetMaterialIDCallback = std::function ; static const QString BAKED_FBX_EXTENSION = ".baked.fbx"; class ModelBaker : public Baker { Q_OBJECT public: ModelBaker(const QUrl& inputModelURL, TextureBakerThreadGetter inputTextureThreadGetter, const QString& bakedOutputDirectory, const QString& originalOutputDirectory = ""); virtual ~ModelBaker(); bool compressMesh(HFMMesh& mesh, bool hasDeformers, FBXNode& dracoMeshNode, GetMaterialIDCallback materialIDCallback = nullptr); QString compressTexture(QString textureFileName, image::TextureUsage::Type = image::TextureUsage::Type::DEFAULT_TEXTURE); virtual void setWasAborted(bool wasAborted) override; QUrl getModelURL() const { return _modelURL; } QString getBakedModelFilePath() const { return _bakedModelFilePath; } public slots: virtual void abort() override; protected: void checkIfTexturesFinished(); void texturesFinished(); void embedTextureMetaData(); void exportScene(); FBXNode _rootNode; QHash _textureContentMap; QUrl _modelURL; QString _bakedOutputDir; QString _originalOutputDir; QString _bakedModelFilePath; QDir _modelTempDir; QString _originalModelFilePath; private slots: void handleBakedTexture(); void handleAbortedTexture(); private: QString createBaseTextureFileName(const QFileInfo & textureFileInfo); QUrl getTextureURL(const QFileInfo& textureFileInfo, QString relativeFileName, bool isEmbedded = false); void bakeTexture(const QUrl & textureURL, image::TextureUsage::Type textureType, const QDir & outputDir, const QString & bakedFilename, const QByteArray & textureContent); QString texturePathRelativeToModel(QUrl modelURL, QUrl textureURL); TextureBakerThreadGetter _textureThreadGetter; QMultiHash> _bakingTextures; QHash _textureNameMatchCount; QHash _remappedTexturePaths; bool _pendingErrorEmission{ false }; }; #endif // hifi_ModelBaker_h