summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/DataModelMetadata/en-us/MetaData.xml1
-rw-r--r--src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp1
-rw-r--r--src/dm/systems/Qt3DSDMComposerTypeDefinitions.h1
-rw-r--r--src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp1
-rw-r--r--src/runtime/Qt3DSAttributeHashes.cpp1
-rw-r--r--src/runtime/Qt3DSAttributeHashes.h1
-rw-r--r--src/runtime/Qt3DSAttributeHashes.txt1
-rw-r--r--src/runtimerender/Qt3DSRenderUIPLoader.cpp1
-rw-r--r--src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp17
-rw-r--r--src/runtimerender/Qt3DSRenderUIPSharedTranslation.h7
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp1
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h10
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp7
-rw-r--r--src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp29
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;
}