.Register(*js::MakeProperty("emissiveTexture", js::ObjectReader<gt::TextureInfo>::Read, >::Material::mEmissiveTexture))
.Register(*js::MakeProperty("emissiveFactor", gt::ReadDaliVector<Vector3>, >::Material::mEmissiveFactor))
.Register(*js::MakeProperty("alphaMode", gt::ReadStringEnum<gt::AlphaMode>, >::Material::mAlphaMode))
- .Register(*js::MakeProperty("alphaCutoff", js::Read::Number<float>, >::Material::mAlphaCutoff)));
+ .Register(*js::MakeProperty("alphaCutoff", js::Read::Number<float>, >::Material::mAlphaCutoff))
+ .Register(*js::MakeProperty("doubleSided", js::Read::Boolean, >::Material::mDoubleSided)));
std::map<gt::Attribute::Type, gt::Ref<gt::Accessor>> ReadMeshPrimitiveAttributes(const json_value_s& j)
{
MaterialDefinition matDef;
auto& pbr = m.mPbrMetallicRoughness;
- if(m.mAlphaMode != gt::AlphaMode::OPAQUE || pbr.mBaseColorFactor.a < 1.f)
+ if(pbr.mBaseColorFactor.a < 1.f)
{
matDef.mFlags |= MaterialDefinition::TRANSPARENCY;
}
matDef.mNeedNormalTexture = false;
}
- // TODO: handle doubleSided
if(m.mOcclusionTexture)
{
const auto semantic = MaterialDefinition::OCCLUSION;
matDef.mEmissiveFactor = m.mEmissiveFactor;
}
+ matDef.mDoubleSided = m.mDoubleSided;
+
outMaterials.emplace_back(std::move(matDef), TextureSet());
}
childModel->mMeshIdx = meshIdx;
child->mRenderable.reset(childModel);
+ child->mInheritColor = true;
scene.AddNode(std::move(child));
Vector3 mScale = Vector3::ONE;
Vector3 mSize = Vector3::ONE;
- bool mIsVisible = true;
+ bool mIsVisible = true;
+ bool mInheritColor = false;
std::unique_ptr<Renderable> mRenderable;
std::unique_ptr<CustomizationDefinition> mCustomization;
ShaderDefinition shaderDef;
shaderDef.mUseBuiltInShader = true;
- shaderDef.mRendererState = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE | RendererState::CULL_BACK;
+ shaderDef.mRendererState = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE;
+
+ auto& materialDef = *receiver.mMaterialDef;
+ if(!materialDef.mDoubleSided)
+ {
+ shaderDef.mRendererState |= RendererState::CULL_BACK;
+ }
- auto& materialDef = *receiver.mMaterialDef;
const bool hasTransparency = MaskMatch(materialDef.mFlags, MaterialDefinition::TRANSPARENCY);
if(hasTransparency)
{