/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
*
*/
-#include "dali-scene3d/public-api/loader/shader-definition-factory.h"
+
+// CLASS HEADER
+#include <dali-scene3d/public-api/loader/shader-definition-factory.h>
+
+// EXTERNAL INCLUDES
+#include <dali/devel-api/common/map-wrapper.h>
#include <cstring>
-#include "dali-scene3d/internal/loader/hash.h"
-#include "dali-scene3d/public-api/loader/blend-shape-details.h"
-#include "dali-scene3d/public-api/loader/node-definition.h"
-#include "dali/devel-api/common/map-wrapper.h"
-namespace Dali
-{
-namespace Scene3D
-{
-namespace Loader
+// INTERNAL INCLUDES
+#include <dali-scene3d/internal/loader/hash.h>
+#include <dali-scene3d/public-api/loader/blend-shape-details.h>
+#include <dali-scene3d/public-api/loader/node-definition.h>
+
+namespace Dali::Scene3D::Loader
{
namespace
{
materialDef.CheckTextures(MaterialDefinition::NORMAL))
{
hash.Add("3TEX");
+
+ // For the glTF, each of basecolor, metallic_roughness, normal texture is not essential.
+ if(materialDef.CheckTextures(MaterialDefinition::ALBEDO))
+ {
+ hash.Add("BCTEX");
+ }
+
+ if(materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS))
+ {
+ hash.Add("MRTEX");
+ }
+
+ if(materialDef.CheckTextures(MaterialDefinition::NORMAL))
+ {
+ hash.Add("NTEX");
+ }
}
if(materialDef.GetAlphaCutoff() > 0.f)
hash.Add("EMIS" /*SIVE*/);
}
+ if(MaskMatch(materialDef.mFlags, MaterialDefinition::SPECULAR))
+ {
+ hash.Add("SPECTEX");
+ }
+
+ if(MaskMatch(materialDef.mFlags, MaterialDefinition::SPECULAR_COLOR))
+ {
+ hash.Add("SPECCOLTEX");
+ }
+
if(MaskMatch(materialDef.mFlags, MaterialDefinition::GLTF_CHANNELS))
{
hash.Add("GLTF" /*_CHANNELS*/);
hash.Add("FLIP" /*_V*/);
}
+ if(meshDef.mColors.IsDefined())
+ {
+ hash.Add("COLATT");
+ }
+
+ if(meshDef.mTangentType == Property::VECTOR4)
+ {
+ hash.Add("V4TAN");
+ }
+
if(meshDef.HasBlendShapes())
{
bool hasPositions = false;
{
ShaderDefinition shaderDef;
shaderDef.mUseBuiltInShader = true;
- shaderDef.mRendererState = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE;
+ shaderDef.mRendererState = RendererState::DEPTH_TEST;
auto& materialDef = *receiver.mMaterialDef;
if(!materialDef.mDoubleSided)
if(hasTransparency)
{
// TODO: this requires more granularity
- shaderDef.mRendererState = (shaderDef.mRendererState | RendererState::ALPHA_BLEND) & ~RendererState::DEPTH_WRITE;
+ shaderDef.mRendererState = (shaderDef.mRendererState | RendererState::ALPHA_BLEND);
}
if(hasTransparency ||
if(MaskMatch(materialDef.mFlags, MaterialDefinition::EMISSIVE))
{
- shaderDef.mDefines.push_back("EMISSIVE");
+ shaderDef.mDefines.push_back("EMISSIVE_TEXTURE");
+ }
+
+ if(MaskMatch(materialDef.mFlags, MaterialDefinition::SPECULAR))
+ {
+ shaderDef.mDefines.push_back("MATERIAL_SPECULAR_TEXTURE");
+ }
+
+ if(MaskMatch(materialDef.mFlags, MaterialDefinition::SPECULAR_COLOR))
+ {
+ shaderDef.mDefines.push_back("MATERIAL_SPECULAR_COLOR_TEXTURE");
}
if(MaskMatch(materialDef.mFlags, MaterialDefinition::GLTF_CHANNELS))
shaderDef.mDefines.push_back("FLIP_V");
}
+ if(meshDef.mColors.IsDefined())
+ {
+ shaderDef.mDefines.push_back("COLOR_ATTRIBUTE");
+ }
+
+ if(meshDef.mTangentType == Property::VECTOR4)
+ {
+ shaderDef.mDefines.push_back("VEC4_TANGENT");
+ }
+
if(meshDef.HasBlendShapes())
{
bool hasPositions = false;
}
}
- if(meshDef.mTangentType == Property::VECTOR4)
- {
- shaderDef.mDefines.push_back("VEC4_TANGENT");
- }
-
shaderDef.mUniforms["uMaxLOD"] = 6.f;
shaderDef.mUniforms["uCubeMatrix"] = Matrix::IDENTITY;
return renderable.mShaderIdx;
}
-} // namespace Loader
-} // namespace Scene3D
-} // namespace Dali
+} // namespace Dali::Scene3D::Loader