// Copyright 2019 The Draco Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef DRACO_TEXTURE_TEXTURE_UTILS_H_ #define DRACO_TEXTURE_TEXTURE_UTILS_H_ #include "draco/draco_features.h" #ifdef DRACO_TRANSCODER_SUPPORTED #include "draco/core/status.h" #include "draco/core/status_or.h" #include "draco/io/file_utils.h" #include "draco/material/material_library.h" #include "draco/texture/texture_library.h" #include "draco/texture/texture_map.h" namespace draco { // Helper class implementing various utilities operating on draco::Texture. class TextureUtils { public: // Returns |texture| image stem (file basename without extension) based on the // source image filename or an empty string when source image is not set. static std::string GetTargetStem(const Texture &texture); // Returns |texture| image stem (file basename without extension) based on the // source image filename or a name generated from |index| and |suffix| like // "Texture5_BaseColor" when source image is not set. static std::string GetOrGenerateTargetStem(const Texture &texture, int index, const std::string &suffix); // Returns |texture| format based on compression settings, the source image // mime type or the source image filename. static ImageFormat GetTargetFormat(const Texture &texture); // Returns |texture| image file extension based on compression settings, the // source image mime type or the source image filename. static std::string GetTargetExtension(const Texture &texture); // Returns |texture| format based on source image mime type or the source // image filename. static ImageFormat GetSourceFormat(const Texture &texture); // Returns image format corresponding to a given image file |extension|. NONE // is returned when |extension| is empty or unknown. static ImageFormat GetFormat(const std::string &extension); // Returns image file extension corresponding to a given image |format|. Empty // extension is returned when the |format| is NONE. static std::string GetExtension(ImageFormat format); // Returns the number of channels required for encoding a |texture| from a // given |material_library|, taking into account texture opacity and assuming // that occlusion and metallic-roughness texture maps may share a texture. // TODO(vytyaz): Move this and FindTextures() to MaterialLibrary class. static int ComputeRequiredNumChannels( const Texture &texture, const MaterialLibrary &material_library); static std::vector FindTextures( const TextureMap::Type texture_type, const MaterialLibrary *material_library); }; } // namespace draco #endif // DRACO_TRANSCODER_SUPPORTED #endif // DRACO_TEXTURE_TEXTURE_UTILS_H_