diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-04-16 13:42:13 +0300 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-05-02 10:19:23 +0000 |
commit | 3dc7636713c98ce2748d367f8525fcab85a6c425 (patch) | |
tree | 12411317058e10feae817e25c33f0e5e24577298 /src/Runtime/Source | |
parent | 437593e677cd1ed85ef846a3488dc3212fdde54a (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')
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(); |