summaryrefslogtreecommitdiffstats
path: root/src/Runtime/Source
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2019-04-16 13:42:13 +0300
committerMahmoud Badri <mahmoud.badri@qt.io>2019-05-02 10:19:23 +0000
commit3dc7636713c98ce2748d367f8525fcab85a6c425 (patch)
tree12411317058e10feae817e25c33f0e5e24577298 /src/Runtime/Source
parent437593e677cd1ed85ef846a3488dc3212fdde54a (diff)
Support alpha channel initial work
In this initial work, all (almost) color properties are converted into a new type (float4) to support an alpha channel. Alpha channel option is shown in the color dialog for Layer and Scene background properties only. The following is remaining: - Scene background alpha doesn't work in the editor (works in the viewer RT1) Task-number: QT3DS-3128 Change-Id: Ib5540ebc8e2ff68709473451e4a92bf66ddb8ad2 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/Runtime/Source')
-rw-r--r--src/Runtime/Source/datamodel/Qt3DSMetadata.cpp11
-rw-r--r--src/Runtime/Source/datamodel/Qt3DSMetadata.h4
-rw-r--r--src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp6
-rw-r--r--src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp118
-rw-r--r--src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp11
-rw-r--r--src/Runtime/Source/runtime/Qt3DSAttributeHashes.h11
-rw-r--r--src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt11
-rw-r--r--src/Runtime/Source/runtime/Qt3DSKernelTypes.h16
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp6
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h2
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h2
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp8
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp13
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp2
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp2
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h2
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp44
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderer.h2
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp6
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h6
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp2
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h2
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp6
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h6
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp5
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h6
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp2
-rw-r--r--src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h2
-rw-r--r--src/Runtime/Source/runtimerender/q3dsqmlrender.h2
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp7
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp13
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h2
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp8
33 files changed, 232 insertions, 114 deletions
diff --git a/src/Runtime/Source/datamodel/Qt3DSMetadata.cpp b/src/Runtime/Source/datamodel/Qt3DSMetadata.cpp
index 99d7cb8e..03c515e0 100644
--- a/src/Runtime/Source/datamodel/Qt3DSMetadata.cpp
+++ b/src/Runtime/Source/datamodel/Qt3DSMetadata.cpp
@@ -474,6 +474,17 @@ public:
return Empty();
}
+ Option<qt3ds::QT3DSVec4> GetPropertyValueVector4(TStrTableStr inType, TStrTableStr inProperty,
+ TStrTableStr inId) override
+ {
+ SRuntimeMetaDataPropertyInfo &theInfo(FindProperty(inType, inProperty, inId));
+ if (theInfo.m_Value.hasValue()) {
+ SFloat4 theFloat4 = qt3dsdm::get<SFloat4>(*theInfo.m_Value);
+ return qt3ds::QT3DSVec4(theFloat4[0], theFloat4[1], theFloat4[2], theFloat4[3]);
+ }
+ return Empty();
+ }
+
virtual Option<qt3ds::QT3DSI32> GetPropertyValueLong(TStrTableStr inType, TStrTableStr inProperty,
TStrTableStr inId) override
{
diff --git a/src/Runtime/Source/datamodel/Qt3DSMetadata.h b/src/Runtime/Source/datamodel/Qt3DSMetadata.h
index a90d4fd6..ea2d4452 100644
--- a/src/Runtime/Source/datamodel/Qt3DSMetadata.h
+++ b/src/Runtime/Source/datamodel/Qt3DSMetadata.h
@@ -33,6 +33,7 @@
#include "foundation/Qt3DSRefCounted.h"
#include "foundation/Qt3DSOption.h"
#include "foundation/Qt3DSVec3.h"
+#include "foundation/Qt3DSVec4.h"
#include <EASTL/string.h>
#include <EASTL/vector.h>
#include "foundation/StringTable.h"
@@ -226,6 +227,9 @@ public:
virtual Option<qt3ds::QT3DSVec3> GetPropertyValueVector3(TStrTableStr inType, TStrTableStr inProperty,
TStrTableStr inId = TStrTableStr()) = 0;
+ virtual Option<qt3ds::QT3DSVec4> GetPropertyValueVector4(TStrTableStr inType,
+ TStrTableStr inProperty, TStrTableStr inId = TStrTableStr()) = 0;
+
//==============================================================================
/**
* Get property value as long
diff --git a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp b/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp
index fd00e647..4ef33604 100644
--- a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp
+++ b/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp
@@ -115,7 +115,7 @@ struct Qt3DSRenderSceneSubPresRenderer : public CSubPresentationRenderer
const SRenderInstanceId instanceId) override;
void RenderWithClear(const SOffscreenRendererEnvironment &inEnvironment,
NVRenderContext &inRenderContext, QT3DSVec2 inPresScale,
- SScene::RenderClearCommand inClearBuffer, QT3DSVec3 inClearColor,
+ SScene::RenderClearCommand inClearBuffer, QT3DSVec4 inClearColor,
const SRenderInstanceId instanceId) override;
};
@@ -805,7 +805,7 @@ void Qt3DSRenderSceneSubPresRenderer::Render(const SOffscreenRendererEnvironment
void Qt3DSRenderSceneSubPresRenderer::RenderWithClear(
const SOffscreenRendererEnvironment &inEnvironment,
NVRenderContext &inRenderContext, QT3DSVec2 inPresScale,
- SScene::RenderClearCommand inClearBuffer, QT3DSVec3 inClearColor,
+ SScene::RenderClearCommand inClearBuffer, QT3DSVec4 inClearColor,
const SRenderInstanceId id)
{
CSubPresentationRenderer::RenderWithClear(inEnvironment, inRenderContext,
@@ -1554,7 +1554,7 @@ struct Qt3DSRenderSceneManager : public Q3DStudio::ISceneManager,
if (theFirstScene->m_Presentation->m_Scene
&& theFirstScene->m_Presentation->m_Scene->m_UseClearColor) {
m_Context->m_Context->SetSceneColor(
- QT3DSVec4(theFirstScene->m_Presentation->m_Scene->m_ClearColor, 1.0f));
+ theFirstScene->m_Presentation->m_Scene->m_ClearColor);
} else
m_Context->m_Context->SetSceneColor(QT3DSVec4(0.0f, 0.0f, 0.0f, 0.0f));
diff --git a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp b/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
index daf6c0f1..8b54e5d5 100644
--- a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
+++ b/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
@@ -285,6 +285,23 @@ struct SRuntimePropertyParser
}
return false;
}
+ template <Qt3DSRenderDirtyFlags::Enum TDirtyType>
+ bool ParseProperty(QT3DSVec4 &outValue)
+ {
+ if (m_Type == Q3DStudio::ATTRIBUTETYPE_FLOAT4) {
+ QT3DSVec4 newValue(m_Value.m_FLOAT4[0], m_Value.m_FLOAT4[1], m_Value.m_FLOAT4[2],
+ m_Value.m_FLOAT4[3]);
+ if (outValue != newValue) {
+ outValue = newValue;
+ SetDirty<TDirtyType>();
+ return true;
+ }
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ return false;
+ }
+
template <Qt3DSRenderDirtyFlags::Enum TDirtyType>
bool ParseProperty(CRegisteredString &outValue)
@@ -453,6 +470,7 @@ struct SRuntimePropertyParser
#define Scene_ClearColor_R ATTRIBUTE_BACKGROUNDCOLOR_R
#define Scene_ClearColor_G ATTRIBUTE_BACKGROUNDCOLOR_G
#define Scene_ClearColor_B ATTRIBUTE_BACKGROUNDCOLOR_B
+#define Scene_ClearColor_A ATTRIBUTE_BACKGROUNDCOLOR_A
#define Scene_UseClearColor ATTRIBUTE_BGCOLORENABLE
#define Node_Rotation ATTRIBUTE_ROTATION
#define Node_Rotation_X ATTRIBUTE_ROTATION_X
@@ -479,6 +497,7 @@ struct SRuntimePropertyParser
#define Layer_ClearColor_R ATTRIBUTE_BACKGROUNDCOLOR_R
#define Layer_ClearColor_G ATTRIBUTE_BACKGROUNDCOLOR_G
#define Layer_ClearColor_B ATTRIBUTE_BACKGROUNDCOLOR_B
+#define Layer_ClearColor_A ATTRIBUTE_BACKGROUNDCOLOR_A
#define Layer_Background ATTRIBUTE_BACKGROUND
#define Layer_BlendType ATTRIBUTE_BLENDTYPE
#define Layer_ProgressiveAAMode ATTRIBUTE_PROGRESSIVEAA
@@ -537,14 +556,17 @@ struct SRuntimePropertyParser
#define Light_DiffuseColor_R ATTRIBUTE_LIGHTDIFFUSE_R
#define Light_DiffuseColor_G ATTRIBUTE_LIGHTDIFFUSE_G
#define Light_DiffuseColor_B ATTRIBUTE_LIGHTDIFFUSE_B
+#define Light_DiffuseColor_A ATTRIBUTE_LIGHTDIFFUSE_A
#define Light_SpecularColor ATTRIBUTE_LIGHTSPECULAR
#define Light_SpecularColor_R ATTRIBUTE_LIGHTSPECULAR_R
#define Light_SpecularColor_G ATTRIBUTE_LIGHTSPECULAR_G
#define Light_SpecularColor_B ATTRIBUTE_LIGHTSPECULAR_B
+#define Light_SpecularColor_A ATTRIBUTE_LIGHTSPECULAR_A
#define Light_AmbientColor ATTRIBUTE_LIGHTAMBIENT
#define Light_AmbientColor_R ATTRIBUTE_LIGHTAMBIENT_R
#define Light_AmbientColor_G ATTRIBUTE_LIGHTAMBIENT_G
#define Light_AmbientColor_B ATTRIBUTE_LIGHTAMBIENT_B
+#define Light_AmbientColor_A ATTRIBUTE_LIGHTAMBIENT_A
#define Light_Brightness ATTRIBUTE_BRIGHTNESS
#define Light_LinearFade ATTRIBUTE_LINEARFADE
#define Light_ExponentialFade ATTRIBUTE_EXPFADE
@@ -572,6 +594,7 @@ struct SRuntimePropertyParser
#define Material_DiffuseColor_R ATTRIBUTE_DIFFUSE_R
#define Material_DiffuseColor_G ATTRIBUTE_DIFFUSE_G
#define Material_DiffuseColor_B ATTRIBUTE_DIFFUSE_B
+#define Material_DiffuseColor_A ATTRIBUTE_DIFFUSE_A
#define Material_DiffuseMaps_0 ATTRIBUTE_DIFFUSEMAP
#define Material_DiffuseMaps_1 ATTRIBUTE_DIFFUSEMAP2
#define Material_DiffuseMaps_2 ATTRIBUTE_DIFFUSEMAP3
@@ -580,6 +603,7 @@ struct SRuntimePropertyParser
#define Material_EmissiveColor_R ATTRIBUTE_EMISSIVECOLOR_R
#define Material_EmissiveColor_G ATTRIBUTE_EMISSIVECOLOR_G
#define Material_EmissiveColor_B ATTRIBUTE_EMISSIVECOLOR_B
+#define Material_EmissiveColor_A ATTRIBUTE_EMISSIVECOLOR_A
#define Material_EmissiveMap ATTRIBUTE_EMISSIVEMAP
#define Material_EmissiveMap2 ATTRIBUTE_EMISSIVEMAP2
#define Material_SpecularReflection ATTRIBUTE_SPECULARREFLECTION
@@ -589,6 +613,7 @@ struct SRuntimePropertyParser
#define Material_SpecularTint_R ATTRIBUTE_SPECULARTINT_R
#define Material_SpecularTint_G ATTRIBUTE_SPECULARTINT_G
#define Material_SpecularTint_B ATTRIBUTE_SPECULARTINT_B
+#define Material_SpecularTint_A ATTRIBUTE_SPECULARTINT_A
#define Material_IOR ATTRIBUTE_IOR
#define Material_FresnelPower ATTRIBUTE_FRESNELPOWER
#define Material_SpecularAmount ATTRIBUTE_SPECULARAMOUNT
@@ -641,9 +666,11 @@ struct SRuntimePropertyParser
#define Text_TextColor_R ATTRIBUTE_TEXTCOLOR_R
#define Text_TextColor_G ATTRIBUTE_TEXTCOLOR_G
#define Text_TextColor_B ATTRIBUTE_TEXTCOLOR_B
+#define Text_TextColor_A ATTRIBUTE_TEXTCOLOR_A
#define Text_BackColor_R ATTRIBUTE_BACKCOLOR_R
#define Text_BackColor_G ATTRIBUTE_BACKCOLOR_G
#define Text_BackColor_B ATTRIBUTE_BACKCOLOR_B
+#define Text_BackColor_A ATTRIBUTE_BACKCOLOR_A
#define Text_UseBackColor ATTRIBUTE_USEBACKCOLOR
#define Text_EnableAcceleratedFont ATTRIBUTE_ENABLEACCELERATEDFONT
#define Path_PathType ATTRIBUTE_PATHTYPE
@@ -664,121 +691,124 @@ struct SRuntimePropertyParser
#define SubPath_Closed ATTRIBUTE_CLOSED
// Fill in implementations for the actual parse tables.
-#define HANDLE_QT3DS_RENDER_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_RENDER_VEC3_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_VEC3_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name##_X: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
break; \
case Q3DStudio::type##_##name##_Y: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
break; \
case Q3DStudio::type##_##name##_Z: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.z); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.z); \
break;
-#define HANDLE_QT3DS_RENDER_REAL_VEC2_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_REAL_VEC2_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name##_X: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
break; \
case Q3DStudio::type##_##name##_Y: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
break;
-#define HANDLE_QT3DS_RENDER_COLOR_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_COLOR_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name##_R: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
break; \
case Q3DStudio::type##_##name##_G: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
break; \
case Q3DStudio::type##_##name##_B: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.z); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.z); \
+ break; \
+ case Q3DStudio::type##_##name##_A: \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.w); \
break;
-#define HANDLE_QT3DS_RENDER_COLOR_VEC3_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_COLOR_VEC3_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_RENDER_TRANSFORM_VEC3_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_TRANSFORM_VEC3_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_RENDER_RADIAN_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_RADIAN_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseRadianProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseRadianProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
// The runtime converts rotations for us.
-#define HANDLE_QT3DS_RENDER_VEC3_RADIAN_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_VEC3_RADIAN_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name##_X: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
break; \
case Q3DStudio::type##_##name##_Y: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
break; \
case Q3DStudio::type##_##name##_Z: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.z); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.z); \
break;
-#define HANDLE_QT3DS_RENDER_OPACITY_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_OPACITY_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseOpacityProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseOpacityProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_ROTATION_ORDER_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_ROTATION_ORDER_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseRotationOrder<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseRotationOrder<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_NODE_ORIENTATION_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_NODE_ORIENTATION_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseOrientation<Qt3DSRenderDirtyFlags::dirty>(theItem.m_Flags); \
+ inParser.ParseOrientation<Qt3DSRenderDirtyFlags::dirty>(theItem.m_Flags); \
break;
-#define HANDLE_QT3DS_RENDER_DEPTH_TEST_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_DEPTH_TEST_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseInverseBoolean<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseInverseBoolean<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_NODE_FLAGS_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_NODE_FLAGS_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseNodeFlagsProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_Flags, \
+ inParser.ParseNodeFlagsProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_Flags, \
NodeFlagValues::name); \
break;
-#define HANDLE_QT3DS_NODE_FLAGS_INVERSE_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_NODE_FLAGS_INVERSE_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseNodeFlagsInverseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_Flags, \
+ inParser.ParseNodeFlagsInverseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_Flags, \
NodeFlagValues::name); \
break;
-#define HANDLE_QT3DS_RENDER_ENUM_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_ENUM_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseEnumProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseEnumProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_RENDER_SOURCEPATH_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_SOURCEPATH_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name: \
- inParser.ParseAndResolveSourcePath<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
+ inParser.ParseAndResolveSourcePath<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name); \
break;
-#define HANDLE_QT3DS_RENDER_ARRAY_PROPERTY(type, name, index, dirty) \
+#define HANDLE_QT3DS_RENDER_ARRAY_PROPERTY(type, name, index, dirty) \
case Q3DStudio::type##_##name##_##index: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name[index]); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name[index]); \
break;
-#define HANDLE_QT3DS_RENDER_VEC2_PROPERTY(type, name, dirty) \
+#define HANDLE_QT3DS_RENDER_VEC2_PROPERTY(type, name, dirty) \
case Q3DStudio::type##_##name##_X: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.x); \
break; \
case Q3DStudio::type##_##name##_Y: \
- inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
+ inParser.ParseProperty<Qt3DSRenderDirtyFlags::dirty>(theItem.m_##name.y); \
break;
struct SSceneTranslator : public Qt3DSTranslator
diff --git a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp b/src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp
index 1409901f..995b5704 100644
--- a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp
+++ b/src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp
@@ -96,14 +96,17 @@ const char *GetAttributeString(const EAttribute inAttribute)
case ATTRIBUTE_LIGHTDIFFUSE_R: return "lightdiffuse.r";
case ATTRIBUTE_LIGHTDIFFUSE_G: return "lightdiffuse.g";
case ATTRIBUTE_LIGHTDIFFUSE_B: return "lightdiffuse.b";
- case ATTRIBUTE_LIGHTAMBIENT_R: return "lightambient.r";
+ case ATTRIBUTE_LIGHTDIFFUSE_A: return "lightdiffuse.a";
case ATTRIBUTE_LIGHTAMBIENT: return "lightambient";
+ case ATTRIBUTE_LIGHTAMBIENT_R: return "lightambient.r";
case ATTRIBUTE_LIGHTAMBIENT_G: return "lightambient.g";
case ATTRIBUTE_LIGHTAMBIENT_B: return "lightambient.b";
+ case ATTRIBUTE_LIGHTAMBIENT_A: return "lightambient.a";
case ATTRIBUTE_LIGHTSPECULAR: return "lightspecular";
case ATTRIBUTE_LIGHTSPECULAR_R: return "lightspecular.r";
case ATTRIBUTE_LIGHTSPECULAR_G: return "lightspecular.g";
case ATTRIBUTE_LIGHTSPECULAR_B: return "lightspecular.b";
+ case ATTRIBUTE_LIGHTSPECULAR_A: return "lightspecular.a";
case ATTRIBUTE_AREAWIDTH: return "areawidth";
case ATTRIBUTE_AREAHEIGHT: return "areaheight";
case ATTRIBUTE_CASTSHADOW: return "castshadow";
@@ -123,16 +126,19 @@ const char *GetAttributeString(const EAttribute inAttribute)
case ATTRIBUTE_EMISSIVECOLOR_R: return "emissivecolor.r";
case ATTRIBUTE_EMISSIVECOLOR_G: return "emissivecolor.g";
case ATTRIBUTE_EMISSIVECOLOR_B: return "emissivecolor.b";
+ case ATTRIBUTE_EMISSIVECOLOR_A: return "emissivecolor.a";
case ATTRIBUTE_DIFFUSE: return "diffuse";
case ATTRIBUTE_DIFFUSE_R: return "diffuse.r";
case ATTRIBUTE_DIFFUSE_G: return "diffuse.g";
case ATTRIBUTE_DIFFUSE_B: return "diffuse.b";
+ case ATTRIBUTE_DIFFUSE_A: return "diffuse.a";
case ATTRIBUTE_SPECULARMAP: return "specularmap";
case ATTRIBUTE_SPECULARMODEL: return "specularmodel";
case ATTRIBUTE_SPECULARTINT: return "speculartint";
case ATTRIBUTE_SPECULARTINT_R: return "speculartint.r";
case ATTRIBUTE_SPECULARTINT_G: return "speculartint.g";
case ATTRIBUTE_SPECULARTINT_B: return "speculartint.b";
+ case ATTRIBUTE_SPECULARTINT_A: return "speculartint.a";
case ATTRIBUTE_IOR: return "ior";
case ATTRIBUTE_FRESNELPOWER: return "fresnelPower";
case ATTRIBUTE_SPECULARAMOUNT: return "specularamount";
@@ -215,6 +221,7 @@ const char *GetAttributeString(const EAttribute inAttribute)
case ATTRIBUTE_TEXTCOLOR_R: return "textcolor.r";
case ATTRIBUTE_TEXTCOLOR_G: return "textcolor.g";
case ATTRIBUTE_TEXTCOLOR_B: return "textcolor.b";
+ case ATTRIBUTE_TEXTCOLOR_A: return "textcolor.a";
case ATTRIBUTE_SIZE: return "size";
case ATTRIBUTE_FONT: return "font";
case ATTRIBUTE_DROPSHADOW: return "dropshadow";
@@ -235,6 +242,7 @@ const char *GetAttributeString(const EAttribute inAttribute)
case ATTRIBUTE_BACKCOLOR_R: return "backcolor.r";
case ATTRIBUTE_BACKCOLOR_G: return "backcolor.g";
case ATTRIBUTE_BACKCOLOR_B: return "backcolor.b";
+ case ATTRIBUTE_BACKCOLOR_A: return "backcolor.a";
case ATTRIBUTE_TEXTTYPE: return "texttype";
case ATTRIBUTE_USEBACKCOLOR: return "usebackcolor";
case ATTRIBUTE_WORDWRAP: return "wordwrap";
@@ -254,6 +262,7 @@ const char *GetAttributeString(const EAttribute inAttribute)
case ATTRIBUTE_BACKGROUNDCOLOR_R: return "backgroundcolor.r";
case ATTRIBUTE_BACKGROUNDCOLOR_G: return "backgroundcolor.g";
case ATTRIBUTE_BACKGROUNDCOLOR_B: return "backgroundcolor.b";
+ case ATTRIBUTE_BACKGROUNDCOLOR_A: return "backgroundcolor.a";
case ATTRIBUTE_PATHTYPE: return "pathtype";
case ATTRIBUTE_LINEARERROR: return "linearerror";
case ATTRIBUTE_EDGETESSAMOUNT: return "edgetessamount";
diff --git a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.h b/src/Runtime/Source/runtime/Qt3DSAttributeHashes.h
index 02dda069..3cbc165a 100644
--- a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.h
+++ b/src/Runtime/Source/runtime/Qt3DSAttributeHashes.h
@@ -87,14 +87,17 @@ enum EAttribute {
ATTRIBUTE_LIGHTDIFFUSE_R = 0x035AAB10, // lightdiffuse.r
ATTRIBUTE_LIGHTDIFFUSE_G = 0x034FA85B, // lightdiffuse.g
ATTRIBUTE_LIGHTDIFFUSE_B = 0x034AA720, // lightdiffuse.b
- ATTRIBUTE_LIGHTAMBIENT_R = 0x0179AD1A, // lightambient.r
+ ATTRIBUTE_LIGHTDIFFUSE_A = 0x0349A6E1, // lightdiffuse.a
ATTRIBUTE_LIGHTAMBIENT = 0x00DA56DE, // lightambient
+ ATTRIBUTE_LIGHTAMBIENT_R = 0x0179AD1A, // lightambient.r
ATTRIBUTE_LIGHTAMBIENT_G = 0x016EAA65, // lightambient.g
ATTRIBUTE_LIGHTAMBIENT_B = 0x0169A92A, // lightambient.b
+ ATTRIBUTE_LIGHTAMBIENT_A = 0x0168A8EB, // lightambient.a
ATTRIBUTE_LIGHTSPECULAR = 0x03E39A07, // lightspecular
ATTRIBUTE_LIGHTSPECULAR_R = 0x0241EBC3, // lightspecular.r
ATTRIBUTE_LIGHTSPECULAR_G = 0x0236E90E, // lightspecular.g
ATTRIBUTE_LIGHTSPECULAR_B = 0x0231E7D3, // lightspecular.b
+ ATTRIBUTE_LIGHTSPECULAR_A = 0x0230E794, // lightspecular.a
ATTRIBUTE_AREAWIDTH = 0x005A8BE7, // areawidth
ATTRIBUTE_AREAHEIGHT = 0x00334D2C, // areaheight
ATTRIBUTE_CASTSHADOW = 0x0335FD81, // castshadow
@@ -114,16 +117,19 @@ enum EAttribute {
ATTRIBUTE_EMISSIVECOLOR_R = 0x039B87D0, // emissivecolor.r
ATTRIBUTE_EMISSIVECOLOR_G = 0x0390851B, // emissivecolor.g
ATTRIBUTE_EMISSIVECOLOR_B = 0x038B83E0, // emissivecolor.b
+ ATTRIBUTE_EMISSIVECOLOR_A = 0x038A83A1, // emissivecolor.a
ATTRIBUTE_DIFFUSE = 0x0105521E, // diffuse
ATTRIBUTE_DIFFUSE_R = 0x015B085A, // diffuse.r
ATTRIBUTE_DIFFUSE_G = 0x015005A5, // diffuse.g
ATTRIBUTE_DIFFUSE_B = 0x014B046A, // diffuse.b
+ ATTRIBUTE_DIFFUSE_A = 0x014A042B, // diffuse.a
ATTRIBUTE_SPECULARMAP = 0x034CD047, // specularmap
ATTRIBUTE_SPECULARMODEL = 0x039EBE5A, // specularmodel
ATTRIBUTE_SPECULARTINT = 0x03535E02, // speculartint
ATTRIBUTE_SPECULARTINT_R = 0x0399623E, // speculartint.r
ATTRIBUTE_SPECULARTINT_G = 0x038E5F89, // speculartint.g
ATTRIBUTE_SPECULARTINT_B = 0x03895E4E, // speculartint.b
+ ATTRIBUTE_SPECULARTINT_A = 0x03885E0F, // speculartint.a
ATTRIBUTE_IOR = 0x00667354, // ior
ATTRIBUTE_FRESNELPOWER = 0x022178B6, // fresnelPower
ATTRIBUTE_SPECULARAMOUNT = 0x01144425, // specularamount
@@ -206,6 +212,7 @@ enum EAttribute {
ATTRIBUTE_TEXTCOLOR_R = 0x00E9F186, // textcolor.r
ATTRIBUTE_TEXTCOLOR_G = 0x00DEEED1, // textcolor.g
ATTRIBUTE_TEXTCOLOR_B = 0x00D9ED96, // textcolor.b
+ ATTRIBUTE_TEXTCOLOR_A = 0x00D8ED57, // textcolor.a
ATTRIBUTE_SIZE = 0x00F2C81F, // size
ATTRIBUTE_FONT = 0x03412331, // font
ATTRIBUTE_DROPSHADOW = 0x03E3F231, // dropshadow
@@ -226,6 +233,7 @@ enum EAttribute {
ATTRIBUTE_BACKCOLOR_R = 0x0290CCE0, // backcolor.r
ATTRIBUTE_BACKCOLOR_G = 0x0285CA2B, // backcolor.g
ATTRIBUTE_BACKCOLOR_B = 0x0280C8F0, // backcolor.b
+ ATTRIBUTE_BACKCOLOR_A = 0x027FC8B1, // backcolor.a
ATTRIBUTE_TEXTTYPE = 0x0240ADD9, // texttype
ATTRIBUTE_USEBACKCOLOR = 0x0243BACB, // usebackcolor
ATTRIBUTE_WORDWRAP = 0x0134B04C, // wordwrap
@@ -245,6 +253,7 @@ enum EAttribute {
ATTRIBUTE_BACKGROUNDCOLOR_R = 0x02AF0767, // backgroundcolor.r
ATTRIBUTE_BACKGROUNDCOLOR_G = 0x02A404B2, // backgroundcolor.g
ATTRIBUTE_BACKGROUNDCOLOR_B = 0x029F0377, // backgroundcolor.b
+ ATTRIBUTE_BACKGROUNDCOLOR_A = 0x029E0338, // backgroundcolor.a
ATTRIBUTE_PATHTYPE = 0x02D2A5E1, // pathtype
ATTRIBUTE_LINEARERROR = 0x0378A51D, // linearerror
ATTRIBUTE_EDGETESSAMOUNT = 0x02577E3A, // edgetessamount
diff --git a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt b/src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt
index 7c38c875..8eec133f 100644
--- a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt
+++ b/src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt
@@ -48,14 +48,17 @@ lightdiffuse
lightdiffuse.r
lightdiffuse.g
lightdiffuse.b
-lightambient.r
+lightdiffuse.a
lightambient
+lightambient.r
lightambient.g
lightambient.b
+lightambient.a
lightspecular
lightspecular.r
lightspecular.g
lightspecular.b
+lightspecular.a
areawidth
areaheight
castshadow
@@ -78,16 +81,19 @@ emissivecolor
emissivecolor.r
emissivecolor.g
emissivecolor.b
+emissivecolor.a
diffuse
diffuse.r
diffuse.g
diffuse.b
+diffuse.a
specularmap
specularmodel
speculartint
speculartint.r
speculartint.g
speculartint.b
+speculartint.a
ior
fresnelPower
specularamount
@@ -173,6 +179,7 @@ textcolor
textcolor.r
textcolor.g
textcolor.b
+textcolor.a
size
font
dropshadow
@@ -193,6 +200,7 @@ textstring
backcolor.r
backcolor.g
backcolor.b
+backcolor.a
texttype
usebackcolor
wordwrap
@@ -214,6 +222,7 @@ background
backgroundcolor.r
backgroundcolor.g
backgroundcolor.b
+backgroundcolor.a
pathtype
linearerror
diff --git a/src/Runtime/Source/runtime/Qt3DSKernelTypes.h b/src/Runtime/Source/runtime/Qt3DSKernelTypes.h
index db290996..0ad4ec61 100644
--- a/src/Runtime/Source/runtime/Qt3DSKernelTypes.h
+++ b/src/Runtime/Source/runtime/Qt3DSKernelTypes.h
@@ -86,6 +86,7 @@ enum EAttributeType {
ATTRIBUTETYPE_ELEMENTREF,
ATTRIBUTETYPE_DATADRIVEN_PARENT,
ATTRIBUTETYPE_DATADRIVEN_CHILD,
+ ATTRIBUTETYPE_FLOAT4,
ATTRIBUTETYPE_FLOAT3,
ATTRIBUTETYPE_FLOAT2,
ATTRIBUTETYPE_DATAINPUT_TIMELINE,
@@ -211,13 +212,14 @@ struct SClone
/// Each element has a number of attributes associated with it - This is the value.
union UVariant {
- INT32 m_INT32; ///< Integer representation
- FLOAT m_FLOAT; ///< Float representation
- THashValue m_Hash; ///< Explicit hash representation
- UINT32 m_StringHandle; ///< Handle into the IStringTable member of the presentation
- void *m_VoidPointer; ///< Generic data Pointer
- UINT32 m_ElementHandle; ///< Element handle. Resolve using IApplication object.
- FLOAT m_FLOAT3[3]; ///< Vector 3 representation
+ INT32 m_INT32; // Integer representation
+ FLOAT m_FLOAT; // Float representation
+ THashValue m_Hash; // Explicit hash representation
+ UINT32 m_StringHandle; // Handle into the IStringTable member of the presentation
+ void *m_VoidPointer; // Generic data Pointer
+ UINT32 m_ElementHandle; // Element handle. Resolve using IApplication object.
+ FLOAT m_FLOAT3[3]; // Vector 3 representation
+ FLOAT m_FLOAT4[4]; // Vector 4 representation
};
} // namespace Q3DStudio
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp b/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp
index 2562ea79..c75c26ee 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp
+++ b/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp
@@ -938,13 +938,11 @@ void Q3DSDistanceFieldRenderer::renderText(SText &text, const QT3DSMat44 &mvp,
int(textureDetails.m_Width), int(textureDetails.m_Height),
glyphInfo.fontScale * float(m_pixelRatio),
QT3DSVec2(glyphInfo.shadowOffsetX, glyphInfo.shadowOffsetY),
- QT3DSVec4(text.m_TextColor, 1),
- shadowColor);
+ text.m_TextColor, shadowColor);
} else {
renderMesh(mesh.inputAssembler, it.key()->texture, mvp, modelView,
int(textureDetails.m_Width), int(textureDetails.m_Height),
- glyphInfo.fontScale * float(m_pixelRatio),
- QT3DSVec4(text.m_TextColor, 1));
+ glyphInfo.fontScale * float(m_pixelRatio), text.m_TextColor);
}
m_renderedGlyphs += glyphHashValue;
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h b/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h
index 57dcf430..6d821624 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h
+++ b/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h
@@ -170,7 +170,7 @@ namespace render {
virtual void RenderWithClear(const SOffscreenRendererEnvironment &inEnvironment,
NVRenderContext &inRenderContext, QT3DSVec2 inPresentationScaleFactor,
SScene::RenderClearCommand inColorBufferNeedsClear,
- QT3DSVec3 inclearColor,
+ QT3DSVec4 inclearColor,
const SRenderInstanceId instanceId) = 0;
// Implementors should implement one of the two interfaces below.
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h b/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h
index 86f20a78..2753bac6 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h
+++ b/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h
@@ -74,7 +74,7 @@ namespace render {
NVRenderContext &/*inRenderContext*/,
QT3DSVec2 /*inPresentationScaleFactor*/,
SScene::RenderClearCommand /*inColorBufferNeedsClear*/,
- QT3DSVec3 /*inclearColor*/,
+ QT3DSVec4 /*inclearColor*/,
const SRenderInstanceId /*instanceId*/) override {}
IGraphObjectPickQuery *GetGraphObjectPickQuery(const SRenderInstanceId instanceId) override
{
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp b/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
index fe6a6dc3..065a8383 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
@@ -83,8 +83,10 @@ struct SShaderLightProperties
m_LightData.m_direction = QT3DSVec4(dir, 0.0);
float normalizedBrightness = inLight->m_Brightness / 100.0f;
- m_LightData.m_diffuse = QT3DSVec4(inLight->m_DiffuseColor * normalizedBrightness, 1.0);
- m_LightData.m_specular = QT3DSVec4(inLight->m_SpecularColor * normalizedBrightness, 1.0);
+ m_LightData.m_diffuse = QT3DSVec4(inLight->m_DiffuseColor.getXYZ() * normalizedBrightness,
+ inLight->m_DiffuseColor.w);
+ m_LightData.m_specular = QT3DSVec4(inLight->m_SpecularColor.getXYZ() * normalizedBrightness,
+ inLight->m_DiffuseColor.w);
if (inLight->m_LightType == RenderLightTypes::Area) {
m_LightData.m_width = inLight->m_AreaWidth;
@@ -102,7 +104,7 @@ struct SShaderLightProperties
m_LightData.m_up = QT3DSVec4(0.0f);
// These components only apply to CG lights
- m_LightData.m_ambient = QT3DSVec4(inLight->m_AmbientColor, 1.0);
+ m_LightData.m_ambient = inLight->m_AmbientColor;
m_LightData.m_constantAttenuation = 1.0;
m_LightData.m_linearAttenuation = inLight->m_LinearFade;
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp b/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
index 4dceaca8..18c71e34 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
@@ -103,7 +103,7 @@ struct SShaderTextureProperties
struct SShaderLightProperties
{
// Color of the light
- QT3DSVec3 m_LightColor;
+ QT3DSVec4 m_LightColor;
SLightSourceShader m_LightData;
SShaderLightProperties() {}
@@ -1583,7 +1583,7 @@ struct SShaderGenerator : public IDefaultMaterialShaderGenerator
// update the constant buffer
shader.m_AoShadowParams.Set();
// We can't cache light properties because they can change per object.
- QT3DSVec3 theLightAmbientTotal = QT3DSVec3(0, 0, 0);
+ QT3DSVec4 theLightAmbientTotal = QT3DSVec4(0, 0, 0, 1);
size_t numShaderLights = shader.m_Lights.size();
size_t numShadowLights = shader.m_ShadowMaps.size();
for (QT3DSU32 lightIdx = 0, shadowMapIdx = 0, lightEnd = inLights.size();
@@ -1609,9 +1609,10 @@ struct SShaderGenerator : public IDefaultMaterialShaderGenerator
float brightness = TranslateConstantAttenuation(theLight->m_Brightness);
// setup light data
- theLightProperties.m_LightColor = theLight->m_DiffuseColor * brightness;
+ theLightProperties.m_LightColor =
+ QT3DSVec4(theLight->m_DiffuseColor.getXYZ() * brightness, 1.0);
theLightProperties.m_LightData.m_specular =
- QT3DSVec4(theLight->m_SpecularColor * brightness, 1.0);
+ QT3DSVec4(theLight->m_SpecularColor.getXYZ() * brightness, 1.0);
theLightProperties.m_LightData.m_direction = QT3DSVec4(inLightDirections[lightIdx], 1.0);
// TODO : This does potentially mean that we can create more shadow map entries than
@@ -1659,7 +1660,7 @@ struct SShaderGenerator : public IDefaultMaterialShaderGenerator
}
theLightAmbientTotal += theLight->m_AmbientColor;
}
- shader.m_LightAmbientTotal = theLightAmbientTotal;
+ shader.m_LightAmbientTotal = theLightAmbientTotal.getXYZ();
}
// Also sets the blend function on the render context.
@@ -1768,7 +1769,7 @@ struct SShaderGenerator : public IDefaultMaterialShaderGenerator
inMaterial.m_EmissiveColor[1] * emissivePower,
inMaterial.m_EmissiveColor[2] * emissivePower, inOpacity);
shader.m_MaterialDiffuse.Set(material_diffuse);
- shader.m_DiffuseColor.Set(inMaterial.m_DiffuseColor);
+ shader.m_DiffuseColor.Set(inMaterial.m_DiffuseColor.getXYZ());
QT3DSVec4 material_specular =
QT3DSVec4(inMaterial.m_SpecularTint[0], inMaterial.m_SpecularTint[1],
inMaterial.m_SpecularTint[2], inMaterial.m_IOR);
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp b/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp
index 046f1b1b..f8c11494 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp
@@ -392,7 +392,7 @@ struct InstanceImpl : public IRenderPluginInstance
void RenderWithClear(const SOffscreenRendererEnvironment &inEnvironment,
NVRenderContext &inRenderContext, QT3DSVec2 inPresScale,
- SScene::RenderClearCommand inClearBuffer, QT3DSVec3 inClearColor,
+ SScene::RenderClearCommand inClearBuffer, QT3DSVec4 inClearColor,
const SRenderInstanceId id)
{
Q_ASSERT(false);
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp b/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp
index cd83f036..0b9d42d3 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp
@@ -99,7 +99,7 @@ namespace render {
void CSubPresentationRenderer::RenderWithClear(
const SOffscreenRendererEnvironment &inEnvironment,
NVRenderContext &inRenderContext, QT3DSVec2 inPresScale,
- SScene::RenderClearCommand inClearBuffer, QT3DSVec3 inClearColor,
+ SScene::RenderClearCommand inClearBuffer, QT3DSVec4 inClearColor,
const SRenderInstanceId id)
{
Q_UNUSED(inEnvironment);
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h b/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h
index 9eb51450..4adac84f 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h
@@ -83,7 +83,7 @@ namespace render {
void RenderWithClear(const SOffscreenRendererEnvironment &inEnvironment,
NVRenderContext &inRenderContext,
QT3DSVec2 inPresScale, SScene::RenderClearCommand inClearBuffer,
- QT3DSVec3 inClearColor,
+ QT3DSVec4 inClearColor,
const SRenderInstanceId instanceId) override;
IGraphObjectPickQuery *GetGraphObjectPickQuery(const SRenderInstanceId) override { return &m_PickQuery; }
bool Pick(const QT3DSVec2 & /*inMouseCoords*/, const QT3DSVec2 & /*inViewportDimensions*/,
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp b/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp
index f64efbcc..61b132ba 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp
@@ -151,6 +151,21 @@ struct WStrOps<SFloat3>
reader.ReadRef(NVDataRef<QT3DSF32>(item.m_Floats, 3));
}
};
+
+template <>
+struct WStrOps<SFloat4>
+{
+ void StrTo(const char8_t *buffer, SFloat4 &item, nvvector<char8_t> &ioTempBuf)
+ {
+ QT3DSU32 len = (QT3DSU32)strlen(buffer);
+ ioTempBuf.resize(len + 1);
+ memCopy(ioTempBuf.data(), buffer, (len + 1) * sizeof(char8_t));
+ MemoryBuffer<RawAllocator> unused;
+ qt3dsdm::IStringTable *theTable(NULL);
+ WCharTReader reader(ioTempBuf.begin(), unused, *theTable);
+ reader.ReadRef(NVDataRef<QT3DSF32>(item.m_Floats, 4));
+ }
+};
}
namespace {
@@ -163,6 +178,7 @@ struct IPropertyParser
virtual Option<QT3DSF32> ParseFloat(const char8_t *inName) = 0;
virtual Option<QT3DSVec2> ParseVec2(const char8_t *inName) = 0;
virtual Option<QT3DSVec3> ParseVec3(const char8_t *inName) = 0;
+ virtual Option<QT3DSVec4> ParseVec4(const char8_t *inName) = 0;
virtual Option<bool> ParseBool(const char8_t *inName) = 0;
virtual Option<QT3DSU32> ParseU32(const char8_t *inName) = 0;
virtual Option<QT3DSI32> ParseI32(const char8_t *inName) = 0;
@@ -222,6 +238,15 @@ struct SMetaPropertyParser : public IPropertyParser
}
return Empty();
}
+ Option<QT3DSVec4> ParseVec4(const char8_t *inName) override
+ {
+ Option<qt3ds::QT3DSVec4> theProperty =
+ m_MetaData.GetPropertyValueVector4(m_Type, Register(inName), m_ClassId);
+ if (theProperty.hasValue()) {
+ return *theProperty;
+ }
+ return Empty();
+ }
Option<bool> ParseBool(const char8_t *inName) override
{
return m_MetaData.GetPropertyValueBool(m_Type, Register(inName), m_ClassId);
@@ -304,6 +329,17 @@ struct SDomReaderPropertyParser : public IPropertyParser
}
return Empty();
}
+ Option<QT3DSVec4> ParseVec4(const char8_t *inName) override
+ {
+ qt3dsdm::SFloat4 retval;
+ const char8_t *tempData;
+ if (m_Reader.UnregisteredAtt(inName, tempData)) {
+ qt3dsdm::WStrOps<qt3dsdm::SFloat4>().StrTo(tempData, retval, m_TempBuf);
+ return QT3DSVec4(retval.m_Floats[0], retval.m_Floats[1], retval.m_Floats[2],
+ retval.m_Floats[3]);
+ }
+ return Empty();
+ }
Option<bool> ParseBool(const char8_t *inName) override
{
bool retval;
@@ -389,6 +425,14 @@ struct SParserHelper<QT3DSVec3>
}
};
template <>
+struct SParserHelper<QT3DSVec4>
+{
+ static Option<QT3DSVec4> Parse(const char8_t *inName, IPropertyParser &inParser)
+ {
+ return inParser.ParseVec4(inName);
+ }
+};
+template <>
struct SParserHelper<bool>
{
static Option<bool> Parse(const char8_t *inName, IPropertyParser &inParser)
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderer.h b/src/Runtime/Source/runtimerender/Qt3DSRenderer.h
index 69a49942..684d15a9 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderer.h
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderer.h
@@ -131,7 +131,7 @@ namespace render {
bool inRenderSiblings = true,
const SRenderInstanceId id = nullptr) = 0;
virtual void RenderLayer(SLayer &inLayer, const QT3DSVec2 &inViewportDimensions, bool clear,
- QT3DSVec3 clearColor, bool inRenderSiblings = true,
+ QT3DSVec4 clearColor, bool inRenderSiblings = true,
const SRenderInstanceId id = nullptr) = 0;
// Studio option to disable picking against sub renderers. This allows better interaction
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp
index 06f3649a..e18a84d2 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp
@@ -36,15 +36,15 @@ SDefaultMaterial::SDefaultMaterial()
, m_IblProbe(NULL)
, m_Lighting(DefaultMaterialLighting::VertexLighting)
, m_BlendMode(DefaultMaterialBlendMode::Normal)
- , m_DiffuseColor(1, 1, 1)
+ , m_DiffuseColor(1, 1, 1, 1)
, m_EmissivePower(0)
, m_EmissiveMap(NULL)
, m_EmissiveMap2(NULL)
- , m_EmissiveColor(1, 1, 1)
+ , m_EmissiveColor(1, 1, 1, 1)
, m_SpecularReflection(NULL)
, m_SpecularMap(NULL)
, m_SpecularModel(DefaultMaterialSpecularModel::Default)
- , m_SpecularTint(1, 1, 1)
+ , m_SpecularTint(1, 1, 1, 1)
, m_IOR(.2f)
, m_FresnelPower(0.0f)
, m_SpecularAmount(0)
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h
index 09595236..48c8d0ba 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h
@@ -80,16 +80,16 @@ namespace render {
SImage *m_IblProbe;
DefaultMaterialLighting::Enum m_Lighting; // defaults to vertex
DefaultMaterialBlendMode::Enum m_BlendMode; // defaults to normal
- QT3DSVec3 m_DiffuseColor; // colors are 0-1 normalized
+ QT3DSVec4 m_DiffuseColor; // colors are 0-1 normalized
SImage *m_DiffuseMaps[3];
QT3DSF32 m_EmissivePower; // 0-100, defaults to 0
- QT3DSVec3 m_EmissiveColor;
+ QT3DSVec4 m_EmissiveColor;
SImage *m_EmissiveMap;
SImage *m_EmissiveMap2;
SImage *m_SpecularReflection;
SImage *m_SpecularMap;
DefaultMaterialSpecularModel::Enum m_SpecularModel;
- QT3DSVec3 m_SpecularTint;
+ QT3DSVec4 m_SpecularTint;
QT3DSF32 m_IOR;
QT3DSF32 m_FresnelPower;
QT3DSF32 m_SpecularAmount; // 0-??, defaults to 0
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp
index ee146624..36a826cb 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp
@@ -41,7 +41,7 @@ SLayer::SLayer()
, m_ProgressiveAAMode(AAModeValues::NoAA)
, m_MultisampleAAMode(AAModeValues::NoAA)
, m_Background(LayerBackground::Transparent)
- , m_ClearColor(0)
+ , m_ClearColor(0.0f)
, m_BlendType(LayerBlendTypes::Normal)
, m_HorizontalFieldValues(HorizontalFieldValues::LeftWidth)
, m_Left(0)
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h
index 3759fe12..5c08e917 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h
@@ -125,7 +125,7 @@ namespace render {
AAModeValues::Enum m_ProgressiveAAMode;
AAModeValues::Enum m_MultisampleAAMode;
LayerBackground::Enum m_Background;
- QT3DSVec3 m_ClearColor;
+ QT3DSVec4 m_ClearColor;
LayerBlendTypes::Enum m_BlendType;
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp
index 3b45e8c9..5c983243 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp
@@ -35,9 +35,9 @@ SLight::SLight()
: SNode(GraphObjectTypes::Light)
, m_LightType(RenderLightTypes::Directional)
, m_Scope(NULL)
- , m_DiffuseColor(1, 1, 1)
- , m_SpecularColor(1, 1, 1)
- , m_AmbientColor(0, 0, 0)
+ , m_DiffuseColor(1, 1, 1, 1)
+ , m_SpecularColor(1, 1, 1, 1)
+ , m_AmbientColor(0, 0, 0, 1)
, m_Brightness(100)
, m_LinearFade(0)
, m_ExponentialFade(0)
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h
index 549e3e26..10f2b866 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h
@@ -51,9 +51,9 @@ namespace render {
{
RenderLightTypes::Enum m_LightType; // Directional
SNode *m_Scope;
- QT3DSVec3 m_DiffuseColor; // colors are 0-1 normalized
- QT3DSVec3 m_SpecularColor; // colors are 0-1 normalized
- QT3DSVec3 m_AmbientColor; // colors are 0-1 normalized
+ QT3DSVec4 m_DiffuseColor; // colors are 0-1 normalized
+ QT3DSVec4 m_SpecularColor; // colors are 0-1 normalized
+ QT3DSVec4 m_AmbientColor; // colors are 0-1 normalized
// The variables below are in the same range as Studio
// Only valid if node is a point light
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp
index 8d206e69..7917bd7a 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp
@@ -39,7 +39,7 @@ SScene::SScene()
: SGraphObject(GraphObjectTypes::Scene)
, m_Presentation(NULL)
, m_FirstChild(NULL)
- , m_ClearColor(0, 0, 0)
+ , m_ClearColor(0.0f)
, m_UseClearColor(true)
, m_Dirty(true)
{
@@ -91,6 +91,7 @@ void SScene::Render(const QT3DSVec2 &inViewportDimensions, IQt3DSRenderContext &
clearColor.x = m_ClearColor.x;
clearColor.y = m_ClearColor.y;
clearColor.z = m_ClearColor.z;
+ clearColor.w = m_ClearColor.w;
}
// Maybe clear and reset to previous clear color after we leave.
qt3ds::render::NVRenderContextScopedProperty<QT3DSVec4> __clearColor(
@@ -106,7 +107,7 @@ void SScene::Render(const QT3DSVec2 &inViewportDimensions, IQt3DSRenderContext &
void SScene::RenderWithClear(const QT3DSVec2 &inViewportDimensions,
IQt3DSRenderContext &inContext,
RenderClearCommand inClearColorBuffer,
- QT3DSVec3 inClearColor,
+ QT3DSVec4 inClearColor,
const SRenderInstanceId id)
{
// If this scene is not using clear color, we set the color
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h
index 57887199..8c4d3fec 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h
@@ -31,7 +31,7 @@
#ifndef QT3DS_RENDER_SCENE_H
#define QT3DS_RENDER_SCENE_H
#include "Qt3DSRender.h"
-#include "foundation/Qt3DSVec3.h"
+#include "foundation/Qt3DSVec4.h"
#include "Qt3DSRenderGraphObject.h"
namespace qt3ds {
@@ -44,7 +44,7 @@ namespace render {
{
SPresentation *m_Presentation;
SLayer *m_FirstChild;
- QT3DSVec3 m_ClearColor;
+ QT3DSVec4 m_ClearColor;
bool m_UseClearColor;
bool m_Dirty;
@@ -76,7 +76,7 @@ namespace render {
const SRenderInstanceId id = nullptr);
void RenderWithClear(const QT3DSVec2 &inViewportDimensions, IQt3DSRenderContext &inContext,
RenderClearCommand inClearColorBuffer,
- QT3DSVec3 inclearColor, const SRenderInstanceId id = nullptr);
+ QT3DSVec4 inclearColor, const SRenderInstanceId id = nullptr);
};
}
}
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp
index e4694c56..b76240b4 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp
@@ -59,7 +59,7 @@ STextRenderInfo::~STextRenderInfo()
SText::SText()
: SNode(GraphObjectTypes::Text)
- , m_TextColor(1, 1, 1)
+ , m_TextColor(1, 1, 1, 1)
, m_TextTexture(NULL)
{
m_Bounds.setEmpty();
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h
index 56a2a9bf..13f5748a 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h
+++ b/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h
@@ -44,7 +44,7 @@ namespace render {
// For these you need to set TextDirty.
// These properties can change every frame with no additional cost.
- QT3DSVec3 m_TextColor;
+ QT3DSVec4 m_TextColor;
// Setup and utilized by the rendering system
NVRenderTexture2D *m_TextTexture;
STextTextureDetails m_TextTextureDetails;
diff --git a/src/Runtime/Source/runtimerender/q3dsqmlrender.h b/src/Runtime/Source/runtimerender/q3dsqmlrender.h
index 12d459cf..99b395de 100644
--- a/src/Runtime/Source/runtimerender/q3dsqmlrender.h
+++ b/src/Runtime/Source/runtimerender/q3dsqmlrender.h
@@ -65,7 +65,7 @@ public:
NVRenderContext &/*inRenderContext*/,
QT3DSVec2 /*inPresentationScaleFactor*/,
SScene::RenderClearCommand /*inColorBufferNeedsClear*/,
- QT3DSVec3 /*inclearColor*/,
+ QT3DSVec4 /*inclearColor*/,
const SRenderInstanceId /*instanceId*/) override {}
IGraphObjectPickQuery *GetGraphObjectPickQuery(const SRenderInstanceId instanceId) override
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
index 24684861..f2f260fd 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
@@ -318,7 +318,8 @@ namespace render {
context.SetBlendFunction(blendFunc);
context.SetBlendEquation(blendEqu);
- QT3DSVec4 theColor(m_Text.m_TextColor, m_Text.m_GlobalOpacity);
+ QT3DSVec4 theColor(m_Text.m_TextColor.x, m_Text.m_TextColor.y, m_Text.m_TextColor.z,
+ m_Text.m_GlobalOpacity);
STextShader &shader(*theInfo.m_Shader);
shader.Render(*m_Text.m_TextTexture, *this, theColor, m_ModelViewProjection,
@@ -342,8 +343,8 @@ namespace render {
context.SetBlendFunction(blendFunc);
context.SetBlendEquation(blendEqu);
- QT3DSVec4 theColor(m_Text.m_TextColor, m_Text.m_GlobalOpacity);
-
+ QT3DSVec4 theColor(m_Text.m_TextColor.x, m_Text.m_TextColor.y, m_Text.m_TextColor.z,
+ m_Text.m_GlobalOpacity);
STextShader &shader(*theInfo.m_Shader);
shader.RenderPath(*m_Text.m_PathFontItem, *m_Text.m_PathFontDetails, *this, theColor,
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
index 7c2603f6..9afb255c 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
@@ -221,7 +221,7 @@ namespace render {
}
void Qt3DSRendererImpl::RenderLayer(SLayer &inLayer, const QT3DSVec2 &inViewportDimensions,
- bool clear, QT3DSVec3 clearColor, bool inRenderSiblings,
+ bool clear, QT3DSVec4 clearColor, bool inRenderSiblings,
const SRenderInstanceId id)
{
(void)inViewportDimensions;
@@ -256,13 +256,10 @@ namespace render {
m_BlendFB->Attach(NVRenderFrameBufferAttachments::Color0, *m_LayerBlendTexture);
theRenderContext.SetRenderTarget(m_BlendFB);
theRenderContext.SetScissorTestEnabled(false);
- QT3DSVec4 color(0.0f, 0.0f, 0.0f, 0.0f);
- if (clear) {
- color.x = clearColor.x;
- color.y = clearColor.y;
- color.z = clearColor.z;
- color.w = 1.0f;
- }
+ QT3DSVec4 color(0.0f);
+ if (clear)
+ color = clearColor;
+
QT3DSVec4 origColor = theRenderContext.GetClearColor();
theRenderContext.SetClearColor(color);
theRenderContext.Clear(qt3ds::render::NVRenderClearValues::Color);
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h
index e5b39b84..67130904 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h
@@ -318,7 +318,7 @@ namespace render {
bool PrepareLayerForRender(SLayer &inLayer, const QT3DSVec2 &inViewportDimensions,
bool inRenderSiblings, const SRenderInstanceId id) override;
void RenderLayer(SLayer &inLayer, const QT3DSVec2 &inViewportDimensions,
- bool clear, QT3DSVec3 clearColor, bool inRenderSiblings,
+ bool clear, QT3DSVec4 clearColor, bool inRenderSiblings,
const SRenderInstanceId id) override;
void ChildrenUpdated(SNode &inParent) override;
QT3DSF32 GetTextScale(const SText &inText) override;
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
index 3fb3bc68..eb1563ee 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
@@ -1489,9 +1489,9 @@ namespace render {
NVRenderContextScopedProperty<NVRenderRect> __viewport(
theRenderContext, &NVRenderContext::GetViewport, &NVRenderContext::SetViewport,
theNewViewport);
- QT3DSVec4 clearColor(0.0);
+ QT3DSVec4 clearColor(0.0f);
if (m_Layer.m_Background == LayerBackground::Color)
- clearColor = QT3DSVec4(m_Layer.m_ClearColor, 1.0);
+ clearColor = m_Layer.m_ClearColor;
NVRenderContextScopedProperty<QT3DSVec4> __clearColor(
theRenderContext, &NVRenderContext::GetClearColor, &NVRenderContext::SetClearColor,
@@ -1768,7 +1768,7 @@ namespace render {
SLayerRenderPreparationResult &thePrepResult(*m_LayerPrepResult);
NVRenderRectF theScreenRect(thePrepResult.GetLayerToPresentationViewport());
- bool blendingEnabled = m_Layer.m_Background == LayerBackground::Transparent;
+ bool blendingEnabled = m_Layer.m_Background != LayerBackground::Unspecified;
if (!thePrepResult.m_Flags.ShouldRenderToTexture()) {
theContext.SetViewport(
m_LayerPrepResult->GetLayerToPresentationViewport().ToIntegerRect());
@@ -1778,7 +1778,7 @@ namespace render {
if (m_Layer.m_Background == LayerBackground::Color) {
NVRenderContextScopedProperty<QT3DSVec4> __clearColor(
theContext, &NVRenderContext::GetClearColor, &NVRenderContext::SetClearColor,
- QT3DSVec4(m_Layer.m_ClearColor, 0.0f));
+ m_Layer.m_ClearColor);
theContext.Clear(NVRenderClearValues::Color);
}
RenderToViewport();