Files
XCEngine/engine/include/XCEngine/Resources/Mesh/MeshImportSettings.h

86 lines
3.2 KiB
C++

#pragma once
#include <XCEngine/Core/Asset/ImportSettings.h>
#include <XCEngine/Resources/Mesh/Mesh.h>
#include <XCEngine/Core/Math/Vector3.h>
namespace XCEngine {
namespace Resources {
enum class MeshImportFlags : Core::uint32 {
None = 0,
FlipUVs = 1 << 0,
FlipWindingOrder = 1 << 1,
GenerateNormals = 1 << 2,
GenerateTangents = 1 << 3,
OptimizeMesh = 1 << 4,
ImportSkinning = 1 << 5,
ImportAnimations = 1 << 6,
ImportMaterials = 1 << 7,
ImportCameras = 1 << 8,
ImportLights = 1 << 9
};
inline MeshImportFlags operator|(MeshImportFlags a, MeshImportFlags b) {
return static_cast<MeshImportFlags>(static_cast<Core::uint32>(a) | static_cast<Core::uint32>(b));
}
inline MeshImportFlags operator&(MeshImportFlags a, MeshImportFlags b) {
return static_cast<MeshImportFlags>(static_cast<Core::uint32>(a) & static_cast<Core::uint32>(b));
}
inline MeshImportFlags operator~(MeshImportFlags a) {
return static_cast<MeshImportFlags>(~static_cast<Core::uint32>(a));
}
class MeshImportSettings : public ImportSettings {
public:
MeshImportSettings();
virtual ~MeshImportSettings() override;
Core::UniqueRef<ImportSettings> Clone() const override;
bool LoadFromJSON(const Containers::String& json) override;
Containers::String SaveToJSON() const override;
void SetImportFlags(MeshImportFlags flags) { m_importFlags = flags; }
MeshImportFlags GetImportFlags() const { return m_importFlags; }
void AddImportFlag(MeshImportFlags flag) { m_importFlags = static_cast<MeshImportFlags>(static_cast<Core::uint32>(m_importFlags) | static_cast<Core::uint32>(flag)); }
void RemoveImportFlag(MeshImportFlags flag) { m_importFlags = static_cast<MeshImportFlags>(static_cast<Core::uint32>(m_importFlags) & ~static_cast<Core::uint32>(flag)); }
bool HasImportFlag(MeshImportFlags flag) const { return (static_cast<Core::uint32>(m_importFlags) & static_cast<Core::uint32>(flag)) != 0; }
void SetScale(float scale) { m_scale = scale; }
float GetScale() const { return m_scale; }
void SetOffset(const Math::Vector3& offset) { m_offset = offset; }
const Math::Vector3& GetOffset() const { return m_offset; }
void SetAxisConversion(bool convert) { m_axisConversion = convert; }
bool GetAxisConversion() const { return m_axisConversion; }
void SetMergeMeshes(bool merge) { m_mergeMeshes = merge; }
bool GetMergeMeshes() const { return m_mergeMeshes; }
void SetOptimizeThreshold(float threshold) { m_optimizeThreshold = threshold; }
float GetOptimizeThreshold() const { return m_optimizeThreshold; }
void SetImportScale(float scale) { m_importScale = scale; }
float GetImportScale() const { return m_importScale; }
void SetThreshold(float threshold) { m_threshold = threshold; }
float GetThreshold() const { return m_threshold; }
private:
MeshImportFlags m_importFlags = MeshImportFlags::ImportMaterials;
float m_scale = 1.0f;
Math::Vector3 m_offset = Math::Vector3::Zero();
bool m_axisConversion = true;
bool m_mergeMeshes = false;
float m_optimizeThreshold = 0.3f;
float m_importScale = 1.0f;
float m_threshold = 0.0f;
};
} // namespace Resources
} // namespace XCEngine