diff options
14 files changed, 78 insertions, 1 deletions
diff --git a/res/DataModelMetadata/en-us/MetaData.xml b/res/DataModelMetadata/en-us/MetaData.xml index 93ad17a..24ebe3a 100644 --- a/res/DataModelMetadata/en-us/MetaData.xml +++ b/res/DataModelMetadata/en-us/MetaData.xml @@ -172,6 +172,7 @@ <Property name="bumpamount" formalName="Bump Amount" type="float" default=".5" category="Material" description="Strength of bump/normal map effect" /> <Property name="displacementmap" formalName="Displacement Map" type="Image" category="Material" description="Grayscale image used to offset vertices\nof the geometry" /> <Property name="displaceamount" formalName="Displacement Amount" type="float" default="20" category="Material" description="Distance to offset vertices" /> + <Property name="transparencymode" formalName="Transparency Mode" default="Default" category="Material" description="Material can be forced to be treated as transparent or opaque. Default behavior depends on the texture transparencies." list="Default:Force Transparent:Force Opaque" animatable="False" /> <Property name="opacity" formalName="Opacity" min="0" max="100" default="100" category="Material" description="Visibility of the geometry for this material." /> <Property name="opacitymap" formalName="Opacity Map" type="Image" category="Material" description="Image to vary the opacity across the material" /> <Property name="emissivecolor" formalName="Emissive Color" type="Color" default="1 1 1 1" category="Material" description="Color of self-illumination for this material" /> diff --git a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp index 7aee9b5..c1c0071 100644 --- a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp +++ b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp @@ -170,6 +170,7 @@ struct DataConstructor<SObjectRefType> #define QT3DS_WCHAR_T_specularamount L"specularamount" #define QT3DS_WCHAR_T_specularroughness L"specularroughness" #define QT3DS_WCHAR_T_roughnessmap L"roughnessmap" +#define QT3DS_WCHAR_T_transparencymode L"transparencymode" #define QT3DS_WCHAR_T_opacitymap L"opacitymap" #define QT3DS_WCHAR_T_emissivepower L"emissivepower" #define QT3DS_WCHAR_T_emissivecolor L"emissivecolor" diff --git a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h index 534a776..ce49f07 100644 --- a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h +++ b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h @@ -190,6 +190,7 @@ class IPropertySystem; HANDLE_COMPOSER_PROPERTY(ior, m_IOR, float, 0) \ HANDLE_COMPOSER_PROPERTY(fresnelPower, m_FresnelPower, float, 0) \ HANDLE_COMPOSER_PROPERTY(vertexcolors, m_VertexColors, bool, false) \ + HANDLE_COMPOSER_PROPERTY(transparencymode, m_TransparencyMode, TDataStrPtr, L"Default") \ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"") #define ITERATE_COMPOSER_REFERENCED_MATERIAL_PROPERTIES \ diff --git a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp index f26d3cf..dbb1648 100644 --- a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp +++ b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp @@ -634,6 +634,7 @@ struct SRuntimePropertyParser #define Material_DiffuseLightWrap ATTRIBUTE_DIFFUSELIGHTWRAP #define Material_ReferencedMaterial ATTRIBUTE_REFERENCEDMATERIAL #define Material_VertexColors ATTRIBUTE_VERTEXCOLORS +#define Material_TransparencyMode ATTRIBUTE_TRANSPARENCYMODE #define Image_ImagePath ATTRIBUTE_SOURCEPATH #define Image_OffscreenRendererId ATTRIBUTE_SUBPRESENTATION #define Image_Scale_X ATTRIBUTE_SCALEU diff --git a/src/runtime/Qt3DSAttributeHashes.cpp b/src/runtime/Qt3DSAttributeHashes.cpp index 4e320df..9d248b7 100644 --- a/src/runtime/Qt3DSAttributeHashes.cpp +++ b/src/runtime/Qt3DSAttributeHashes.cpp @@ -165,6 +165,7 @@ const char *GetAttributeString(const EAttribute inAttribute) case ATTRIBUTE_DIFFUSELIGHTWRAP: return "diffuselightwrap"; case ATTRIBUTE_REFERENCEDMATERIAL: return "referencedmaterial"; case ATTRIBUTE_VERTEXCOLORS: return "vertexcolors"; + case ATTRIBUTE_TRANSPARENCYMODE: return "transparencymode"; case ATTRIBUTE_ROTATIONUV: return "rotationuv"; case ATTRIBUTE_POSITIONU: return "positionu"; case ATTRIBUTE_POSITIONV: return "positionv"; diff --git a/src/runtime/Qt3DSAttributeHashes.h b/src/runtime/Qt3DSAttributeHashes.h index a1cd41f..3f53541 100644 --- a/src/runtime/Qt3DSAttributeHashes.h +++ b/src/runtime/Qt3DSAttributeHashes.h @@ -156,6 +156,7 @@ enum EAttribute { ATTRIBUTE_DIFFUSELIGHTWRAP = 0x038F6522, // diffuselightwrap ATTRIBUTE_REFERENCEDMATERIAL = 0x035FDA80, // referencedmaterial ATTRIBUTE_VERTEXCOLORS = 0x000814EC, // vertexcolors + ATTRIBUTE_TRANSPARENCYMODE = 0x02E77D05, // transparencymode ATTRIBUTE_ROTATIONUV = 0x012E3A61, // rotationuv ATTRIBUTE_POSITIONU = 0x01D05AB4, // positionu ATTRIBUTE_POSITIONV = 0x01D15AF3, // positionv diff --git a/src/runtime/Qt3DSAttributeHashes.txt b/src/runtime/Qt3DSAttributeHashes.txt index 0cc3e07..b8e2a7f 100644 --- a/src/runtime/Qt3DSAttributeHashes.txt +++ b/src/runtime/Qt3DSAttributeHashes.txt @@ -120,6 +120,7 @@ translucentfalloff diffuselightwrap referencedmaterial vertexcolors +transparencymode rotationuv positionu diff --git a/src/runtimerender/Qt3DSRenderUIPLoader.cpp b/src/runtimerender/Qt3DSRenderUIPLoader.cpp index 3c8a0bf..073df7f 100644 --- a/src/runtimerender/Qt3DSRenderUIPLoader.cpp +++ b/src/runtimerender/Qt3DSRenderUIPLoader.cpp @@ -823,6 +823,7 @@ struct SRenderUIPLoader : public IDOMReferenceResolver #define Material_DiffuseLightWrap "diffuselightwrap" #define Material_ReferencedMaterial "referencedmaterial" #define Material_VertexColors "vertexcolors" +#define Material_TransparencyMode "transparencymode" #define Image_ImagePath "sourcepath" #define Image_OffscreenRendererId "subpresentation" #define Image_Scale_X "scaleu" diff --git a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp index a059493..077a337 100644 --- a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp +++ b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp @@ -94,6 +94,8 @@ namespace render { #define WCHAR_T_Default L"Default" #define WCHAR_T_KGGX L"KGGX" #define WCHAR_T_KWard L"KWard" +#define WCHAR_T_ForceTransparent L"Force Transparent" +#define WCHAR_T_ForceOpaque L"Force Opaque" #define WCHAR_T_Transparent L"Transparent" #define WCHAR_T_Unspecified L"Unspecified" #define WCHAR_T_Color L"SolidColor" @@ -177,6 +179,8 @@ namespace render { #define CHAR_T_Default "Default" #define CHAR_T_KGGX "KGGX" #define CHAR_T_KWard "KWard" +#define CHAR_T_ForceTransparent "Force Transparent" +#define CHAR_T_ForceOpaque "Force Opaque" #define CHAR_T_Transparent "Transparent" #define CHAR_T_Unspecified "Unspecified" #define CHAR_T_Color "SolidColor" @@ -353,6 +357,14 @@ namespace render { { (QT3DSU32)-1, NULL }, }; + SEnumNameMap g_TransparencyModeMap[] = { + DEFINE_NAME_MAP_ENTRY(DefaultMaterialTransparencyMode::Default, Default), + DEFINE_NAME_MAP_ENTRY(DefaultMaterialTransparencyMode::ForceTransparent, + ForceTransparent), + DEFINE_NAME_MAP_ENTRY(DefaultMaterialTransparencyMode::ForceOpaque, ForceOpaque), + { (QT3DSU32)-1, NULL }, + }; + SEnumNameMap g_TessellationValuesMap[] = { DEFINE_NAME_MAP_ENTRY(TessModeValues::NoTess, None), DEFINE_NAME_MAP_ENTRY(TessModeValues::TessLinear, Linear), @@ -453,6 +465,11 @@ namespace render { return g_SpecularTypesMap; } + SEnumNameMap *SEnumParseMap<DefaultMaterialTransparencyMode::Enum>::GetMap() + { + return g_TransparencyModeMap; + } + SEnumNameMap *SEnumParseMap<TessModeValues::Enum>::GetMap() { return g_TessellationValuesMap; } SEnumNameMap *SEnumParseMap<PathCapping::Enum>::GetMap() { return g_PathCappingValuesMap; } diff --git a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h index 06c6346..01740e6 100644 --- a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h +++ b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h @@ -169,6 +169,12 @@ namespace render { }; template <> + struct SEnumParseMap<DefaultMaterialTransparencyMode::Enum> + { + static SEnumNameMap *GetMap(); + }; + + template <> struct SEnumParseMap<TessModeValues::Enum> { static SEnumNameMap *GetMap(); @@ -418,6 +424,7 @@ namespace render { HANDLE_QT3DS_RENDER_PROPERTY(Material, SpecularAmount, Dirty) \ HANDLE_QT3DS_RENDER_PROPERTY(Material, SpecularRoughness, Dirty) \ HANDLE_QT3DS_RENDER_PROPERTY(Material, RoughnessMap, Dirty) \ + HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Material, TransparencyMode, Dirty) \ HANDLE_QT3DS_RENDER_OPACITY_PROPERTY(Material, Opacity, Dirty) \ HANDLE_QT3DS_RENDER_PROPERTY(Material, OpacityMap, Dirty) \ HANDLE_QT3DS_RENDER_PROPERTY(Material, BumpMap, Dirty) \ diff --git a/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp b/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp index e18a84d..b914a5b 100644 --- a/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp +++ b/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp @@ -61,6 +61,7 @@ SDefaultMaterial::SDefaultMaterial() , m_TranslucentFalloff(0.f) , m_DiffuseLightWrap(0.f) , m_VertexColors(false) + , m_TransparencyMode(DefaultMaterialTransparencyMode::Default) , m_NextSibling(NULL) , m_Parent(NULL) { diff --git a/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h b/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h index 48c8d0b..22af262 100644 --- a/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h +++ b/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h @@ -69,6 +69,15 @@ namespace render { }; }; + struct DefaultMaterialTransparencyMode + { + enum Enum { + Default = 0, + ForceTransparent, + ForceOpaque + }; + }; + struct SImage; struct QT3DS_AUTOTEST_EXPORT SDefaultMaterial : SGraphObject @@ -106,6 +115,7 @@ namespace render { QT3DSF32 m_TranslucentFalloff; // 0 - ?? QT3DSF32 m_DiffuseLightWrap; // 0 - 1 bool m_VertexColors; + DefaultMaterialTransparencyMode::Enum m_TransparencyMode; // Materials are stored as a linked list on models. SGraphObject *m_NextSibling; SModel *m_Parent; diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp index 3016ad6..34c2173 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp @@ -784,8 +784,13 @@ namespace render { renderableFlags |= RenderPreparationResultFlagValues::CompletelyTransparent; } - if (IsNotOne(subsetOpacity)) + if (IsNotOne(subsetOpacity) || theMaterial->m_TransparencyMode + == DefaultMaterialTransparencyMode::ForceTransparent) { renderableFlags |= RenderPreparationResultFlagValues::HasTransparency; + } else if (theMaterial->m_TransparencyMode + == DefaultMaterialTransparencyMode::ForceOpaque) { + renderableFlags.clearOrSet(false, RenderPreparationResultFlagValues::HasTransparency); + } // Enable alpha test, but only if the whole object opacity is full // so parts of the object might be fully opaque diff --git a/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp b/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp index 9f98c9d..353e585 100644 --- a/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp +++ b/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp @@ -790,6 +790,35 @@ bool SLoadedTexture::ScanForTransparency(bool &alsoOpaquePixels) // integer scans. return false; break; + case NVRenderTextureFormats::RGBA_ASTC_4x4: + case NVRenderTextureFormats::RGBA_ASTC_5x4: + case NVRenderTextureFormats::RGBA_ASTC_5x5: + case NVRenderTextureFormats::RGBA_ASTC_6x5: + case NVRenderTextureFormats::RGBA_ASTC_6x6: + case NVRenderTextureFormats::RGBA_ASTC_8x5: + case NVRenderTextureFormats::RGBA_ASTC_8x6: + case NVRenderTextureFormats::RGBA_ASTC_8x8: + case NVRenderTextureFormats::RGBA_ASTC_10x5: + case NVRenderTextureFormats::RGBA_ASTC_10x6: + case NVRenderTextureFormats::RGBA_ASTC_10x8: + case NVRenderTextureFormats::RGBA_ASTC_10x10: + case NVRenderTextureFormats::RGBA_ASTC_12x10: + case NVRenderTextureFormats::RGBA_ASTC_12x12: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_4x4: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_5x4: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_5x5: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_6x5: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_6x6: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_8x5: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_8x6: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_8x8: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_10x5: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_10x6: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_10x8: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_10x10: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_12x10: + case NVRenderTextureFormats::SRGB8_Alpha8_ASTC_12x12: + return false; default: break; } |