Plasma Engine  2.0
Loading...
Searching...
No Matches
Importer.h
1#pragma once
2
3#include <Foundation/Types/UniquePtr.h>
4#include <ModelImporter2/ModelImporterDLL.h>
5#include <RendererCore/Meshes/MeshBufferUtils.h>
6
8class plProgress;
12
13namespace plModelImporter2
14{
16 {
17 plString m_sSourceFile;
18
19 bool m_bImportSkinningData = false;
20 bool m_bRecomputeNormals = false;
21 bool m_bRecomputeTangents = false;
22 bool m_bNormalizeWeights = false;
23 plMat3 m_RootTransform = plMat3::MakeIdentity();
24
25 plMeshResourceDescriptor* m_pMeshOutput = nullptr;
26 plEnum<plMeshNormalPrecision> m_MeshNormalsPrecision = plMeshNormalPrecision::Default;
27 plEnum<plMeshTexCoordPrecision> m_MeshTexCoordsPrecision = plMeshTexCoordPrecision::Default;
28 plEnum<plMeshBoneWeigthPrecision> m_MeshBoneWeightPrecision = plMeshBoneWeigthPrecision::Default;
29 plEnum<plMeshVertexColorConversion> m_MeshVertexColorConversion = plMeshVertexColorConversion::Default;
30
31 plEditableSkeleton* m_pSkeletonOutput = nullptr;
32
33 bool m_bAdditiveAnimation = false;
34 plString m_sAnimationToImport; // empty = first in file; "name" = only anim with that name
35 plAnimationClipResourceDescriptor* m_pAnimationOutput = nullptr;
36 plUInt32 m_uiFirstAnimKeyframe = 0;
37 plUInt32 m_uiNumAnimKeyframes = 0;
38 };
39
40 enum class PropertySemantic : plInt8
41 {
42 Unknown = 0,
43
44 DiffuseColor,
45 RoughnessValue,
46 MetallicValue,
47 EmissiveColor,
48 TwosidedValue,
49 };
50
51 enum class TextureSemantic : plInt8
52 {
53 Unknown = 0,
54
55 DiffuseMap,
56 DiffuseAlphaMap,
57 OcclusionMap,
58 RoughnessMap,
59 MetallicMap,
60 OrmMap,
61 DisplacementMap,
62 NormalMap,
63 EmissiveMap,
64 };
65
66 struct PL_MODELIMPORTER2_DLL OutputTexture
67 {
68 plString m_sFilename;
69 plString m_sFileFormatExtension;
70 plConstByteArrayPtr m_RawData;
71
72 void GenerateFileName(plStringBuilder& out_sName) const;
73 };
74
75 struct PL_MODELIMPORTER2_DLL OutputMaterial
76 {
77 plString m_sName;
78
79 plInt32 m_iReferencedByMesh = -1; // if -1, no sub-mesh in the output actually references this
80 plMap<TextureSemantic, plString> m_TextureReferences; // semantic -> path
81 plMap<PropertySemantic, plVariant> m_Properties; // semantic -> value
82 };
83
84 class PL_MODELIMPORTER2_DLL Importer
85 {
86 public:
87 Importer();
88 virtual ~Importer();
89
90 plResult Import(const ImportOptions& options, plLogInterface* pLogInterface = nullptr, plProgress* pProgress = nullptr);
91 const ImportOptions& GetImportOptions() const { return m_Options; }
92
93 plMap<plString, OutputTexture> m_OutputTextures; // path -> additional data
94 plDeque<OutputMaterial> m_OutputMaterials;
95 plDynamicArray<plString> m_OutputAnimationNames;
96
97 protected:
98 virtual plResult DoImport() = 0;
99
100 ImportOptions m_Options;
101 plProgress* m_pProgress = nullptr;
102 };
103
104} // namespace plModelImporter2
Definition Deque.h:270
Definition DynamicArray.h:81
Definition EditableSkeleton.h:93
Base class for all logging classes.
Definition Log.h:77
Definition Map.h:408
static plMat3Template< float > MakeIdentity()
Definition Mat3_inl.h:48
Definition MeshResourceDescriptor.h:9
Definition Importer.h:85
Manages the way a progress bar is subdivided and advanced.
Definition Progress.h:36
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
Definition AnimationClipResource.h:19
A custom enum implementation that allows to define the underlying storage type to control its memory ...
Definition Enum.h:37
Definition Importer.h:16
Definition Importer.h:76
Definition Importer.h:67
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54