99#include < cage-core/meshAlgorithms.h>
1010#include < cage-core/meshImport.h>
1111#include < cage-core/skeletalAnimation.h>
12- #include < cage-engine/shaderConventions .h>
12+ #include < cage-engine/model .h>
1313
1414MeshImportConfig meshImportConfig ()
1515{
@@ -164,26 +164,9 @@ uint32 meshImportSelectIndex(const MeshImportResult &result)
164164
165165namespace
166166{
167- enum class ModelDataFlags : uint32
167+ void setFlags (MeshComponentsFlags &flags, MeshComponentsFlags idx, bool available, const char *name)
168168 {
169- None = 0 ,
170- Normals = 1 << 0 ,
171- Bones = 1 << 1 ,
172- Uvs2 = 1 << 2 ,
173- Uvs3 = 1 << 3 ,
174- };
175- }
176-
177- namespace cage
178- {
179- GCHL_ENUM_BITS (ModelDataFlags);
180- }
181-
182- namespace
183- {
184- void setFlags (ModelDataFlags &flags, ModelDataFlags idx, bool available, const char *name)
185- {
186- bool requested = toBool (processor->property (name));
169+ const bool requested = toBool (processor->property (name));
187170 if (requested && !available)
188171 {
189172 CAGE_LOG_THROW (cage::String (" requested feature: " ) + name);
@@ -219,13 +202,13 @@ namespace
219202 }
220203 }
221204
222- void validateFlags (const ModelHeader &dsm, const ModelDataFlags flags, const MeshRenderFlags renderFlags, const MeshImportMaterial &mat)
205+ void validateFlags (const ModelHeader &dsm, const MeshComponentsFlags flags, const MeshRenderFlags renderFlags, const MeshImportMaterial &mat)
223206 {
224207 {
225208 uint32 texCount = 0 ;
226209 for (uint32 i = 0 ; i < MaxTexturesCountPerMaterial; i++)
227210 texCount += dsm.textureNames [i] == 0 ? 0 : 1 ;
228- if (texCount && none (flags & (ModelDataFlags ::Uvs2 | ModelDataFlags ::Uvs3)))
211+ if (texCount && none (flags & (MeshComponentsFlags ::Uvs2 | MeshComponentsFlags ::Uvs3)))
229212 {
230213 if (dsm.shaderName )
231214 CAGE_LOG (SeverityEnum::Warning, " assetProcessor" , " material has a texture but no uvs" );
@@ -237,7 +220,7 @@ namespace
237220 if (any (renderFlags & MeshRenderFlags::CutOut) + any (renderFlags & MeshRenderFlags::Transparent) + any (renderFlags & MeshRenderFlags::Fade) > 1 )
238221 CAGE_THROW_ERROR (Exception, " material has multiple transparency flags (cutOut, transparent, fade)" );
239222
240- if (dsm.textureNames [CAGE_SHADER_TEXTURE_NORMAL ] != 0 && none (flags & ModelDataFlags ::Normals))
223+ if (dsm.textureNames [2 ] != 0 && none (flags & MeshComponentsFlags ::Normals))
241224 CAGE_THROW_ERROR (Exception, " model uses normal map texture but has no normals" );
242225 }
243226
@@ -301,29 +284,29 @@ void processModel()
301284 if (part.mesh ->verticesCount () == 0 )
302285 CAGE_THROW_ERROR (Exception, " the mesh is empty" );
303286
304- ModelDataFlags flags = ModelDataFlags ::None;
305- setFlags (flags, ModelDataFlags ::Uvs2, !part.mesh ->uvs ().empty () || !part.mesh ->uvs3 ().empty (), " uvs" );
306- setFlags (flags, ModelDataFlags ::Normals, !part.mesh ->normals ().empty (), " normals" );
307- setFlags (flags, ModelDataFlags ::Bones, !part.mesh ->boneIndices ().empty (), " bones" );
287+ MeshComponentsFlags flags = MeshComponentsFlags ::None;
288+ setFlags (flags, MeshComponentsFlags ::Uvs2, !part.mesh ->uvs ().empty () || !part.mesh ->uvs3 ().empty (), " uvs" );
289+ setFlags (flags, MeshComponentsFlags ::Normals, !part.mesh ->normals ().empty (), " normals" );
290+ setFlags (flags, MeshComponentsFlags ::Bones, !part.mesh ->boneIndices ().empty (), " bones" );
308291
309292 if (!part.mesh ->uvs3 ().empty ())
310293 {
311294 CAGE_ASSERT (part.mesh ->uvs ().empty ());
312- flags &= ~ModelDataFlags ::Uvs2;
313- flags |= ModelDataFlags ::Uvs3;
295+ flags &= ~MeshComponentsFlags ::Uvs2;
296+ flags |= MeshComponentsFlags ::Uvs3;
314297 }
315- if (any (flags & ModelDataFlags ::Uvs2))
298+ if (any (flags & MeshComponentsFlags ::Uvs2))
316299 CAGE_LOG (SeverityEnum::Info, " assetProcessor" , " using 2D uvs" );
317- if (any (flags & ModelDataFlags ::Uvs3))
300+ if (any (flags & MeshComponentsFlags ::Uvs3))
318301 CAGE_LOG (SeverityEnum::Info, " assetProcessor" , " using 3D uvs" );
319302
320- if (none (flags & ModelDataFlags ::Uvs2))
303+ if (none (flags & MeshComponentsFlags ::Uvs2))
321304 part.mesh ->uvs ({});
322- if (none (flags & ModelDataFlags ::Uvs3))
305+ if (none (flags & MeshComponentsFlags ::Uvs3))
323306 part.mesh ->uvs3 ({});
324- if (none (flags & ModelDataFlags ::Normals))
307+ if (none (flags & MeshComponentsFlags ::Normals))
325308 part.mesh ->normals ({});
326- if (none (flags & ModelDataFlags ::Bones))
309+ if (none (flags & MeshComponentsFlags ::Bones))
327310 {
328311 part.mesh ->boneIndices (PointerRange<Vec4i>());
329312 part.mesh ->boneWeights (PointerRange<Vec4>());
@@ -342,13 +325,13 @@ void processModel()
342325 switch (t.type )
343326 {
344327 case MeshImportTextureType::Albedo:
345- dsm.textureNames [CAGE_SHADER_TEXTURE_ALBEDO ] = n;
328+ dsm.textureNames [0 ] = n;
346329 break ;
347330 case MeshImportTextureType::Special:
348- dsm.textureNames [CAGE_SHADER_TEXTURE_SPECIAL ] = n;
331+ dsm.textureNames [1 ] = n;
349332 break ;
350333 case MeshImportTextureType::Normal:
351- dsm.textureNames [CAGE_SHADER_TEXTURE_NORMAL ] = n;
334+ dsm.textureNames [2 ] = n;
352335 break ;
353336 case MeshImportTextureType::Custom:
354337 dsm.textureNames [3 ] = n;
@@ -388,7 +371,7 @@ void processModel()
388371 h.dependenciesCount ++;
389372 h.dependenciesCount += !!dsm.shaderName ;
390373
391- cage:: MemoryBuffer buffer;
374+ MemoryBuffer buffer;
392375 Serializer ser (buffer);
393376 ser << dsm;
394377 ser << mat;
0 commit comments