// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
#pragma once
#include "Types.h"
#if COMPILE_WITH_ASSETS_IMPORTER
#include "Engine/Tools/TextureTool/TextureTool.h"
#include "Engine/Graphics/Textures/TextureBase.h"
///
/// Enable/disable caching texture import options
///
#define IMPORT_TEXTURE_CACHE_OPTIONS 1
///
/// Importing textures utility
///
class ImportTexture
{
public:
typedef TextureTool::Options Options;
public:
///
/// Tries the get texture import options from the target location asset.
///
/// The asset path.
/// The options.
/// True if success, otherwise false.
static bool TryGetImportOptions(const StringView& path, Options& options);
///
/// Imports texture, cube texture or sprite atlas.
///
/// The importing context.
/// Result.
static CreateAssetResult Import(CreateAssetContext& context);
///
/// Creates the Texture. Argument must be TextureData*.
///
/// The importing context.
/// Result.
static CreateAssetResult ImportAsTextureData(CreateAssetContext& context);
///
/// Creates the Texture. Argument must be TextureBase::InitData*.
///
/// The importing context.
/// Result.
static CreateAssetResult ImportAsInitData(CreateAssetContext& context);
///
/// Creates the Texture asset from the given data.
///
/// The importing context.
/// The texture data.
/// Result.
static CreateAssetResult Create(CreateAssetContext& context, TextureData* textureData);
///
/// Creates the Texture asset from the given data.
///
/// The importing context.
/// The texture data.
/// Result.
static CreateAssetResult Create(CreateAssetContext& context, TextureBase::InitData* initData);
///
/// Imports the Cube Texture.
///
/// The importing context.
/// Result.
static CreateAssetResult ImportCube(CreateAssetContext& context);
///
/// Creates the Cube Texture asset from the given data.
///
/// The importing context.
/// The cube texture data.
/// Result.
static CreateAssetResult CreateCube(CreateAssetContext& context, TextureData* textureData);
///
/// Imports the IES Profile file.
///
/// The importing context.
/// Result.
static CreateAssetResult ImportIES(CreateAssetContext& context);
private:
static void InitOptions(CreateAssetContext& context, Options& options);
static CreateAssetResult Create(CreateAssetContext& context, const TextureData& textureData, Options& options);
static CreateAssetResult Create(CreateAssetContext& context, const TextureBase::InitData& textureData, Options& options);
};
#endif