summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2019-05-03 15:31:34 +0300
committerJere Tuliniemi <jere.tuliniemi@qt.io>2019-05-06 11:15:27 +0000
commit655c1952563a31179fefb46eb178caa662bc3bee (patch)
tree6596fd66d209d65cf6e54777226425c3b83fb21b
parente40d5ffa94622c316ff89bc4a0515c804cb2570e (diff)
Implement fixes to the distance field renderer
- Change modelView matrix to mvp for sharper texts - Support global opacity from parents - Allow changing alpha from the text color picker - Change shadow color to be the same as the text color Task-number: QT3DS-3343 Task-number: QT3DS-3363 Change-Id: I37178abe6c9239619a3f9de440d2b9245a138a82 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp10
-rw-r--r--src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h1
-rw-r--r--src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp3
-rw-r--r--src/Authoring/Studio/Render/StudioRendererTranslation.cpp3
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp35
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h19
-rw-r--r--src/Runtime/Source/runtimerender/Qt3DSRenderer.h3
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp4
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h5
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp5
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h3
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp5
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h2
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp17
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h7
-rw-r--r--src/Runtime/res/effectlib/distancefieldtext.vert3
-rw-r--r--src/Runtime/res/effectlib/distancefieldtext_core.vert3
-rw-r--r--src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag2
-rw-r--r--src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert3
-rw-r--r--src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag2
-rw-r--r--src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert3
21 files changed, 60 insertions, 78 deletions
diff --git a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
index aa841091..f6a509dd 100644
--- a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
+++ b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
@@ -342,6 +342,16 @@ qt3dsdm::Qt3DSDMPropertyHandle CClientDataModelBridge::getBGColorProperty(int in
return 0;
}
+qt3dsdm::Qt3DSDMPropertyHandle CClientDataModelBridge::getTextColorProperty(int instance) const
+{
+ EStudioObjectType instanceType = GetObjectType(instance);
+
+ if (instanceType == OBJTYPE_TEXT)
+ return m_Text.m_TextColor;
+
+ return 0;
+}
+
bool CClientDataModelBridge::IsInternalProperty(const TCharStr &inPropertyName) const
{
return (inPropertyName == L"name" || inPropertyName == L"importid" || inPropertyName == L"type"
diff --git a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
index c44fe808..9050a1f8 100644
--- a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
+++ b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
@@ -185,6 +185,7 @@ public:
qt3dsdm::Qt3DSDMPropertyHandle getSubpresentationProperty() const;
qt3dsdm::Qt3DSDMPropertyHandle getVariantsProperty(int instance) const;
qt3dsdm::Qt3DSDMPropertyHandle getBGColorProperty(int instance) const;
+ qt3dsdm::Qt3DSDMPropertyHandle getTextColorProperty(int instance) const;
qt3dsdm::Qt3DSDMInstanceHandle GetActionInstance();
qt3dsdm::Qt3DSDMPropertyHandle GetActionEyeball();
qt3dsdm::Qt3DSDMPropertyHandle GetImportId();
diff --git a/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp b/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp
index 89e26a69..38f65da8 100644
--- a/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp
+++ b/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp
@@ -840,7 +840,8 @@ QColor InspectorControlView::showColorDialog(const QColor &color, int instance,
if (instance && handle) {
auto bridge = g_StudioApp.GetCore()->GetDoc()->GetStudioSystem()
->GetClientDataModelBridge();
- showAlpha = bridge->getBGColorProperty(instance).GetHandleValue() == handle;
+ showAlpha = bridge->getBGColorProperty(instance).GetHandleValue() == handle
+ || bridge->getTextColorProperty(instance).GetHandleValue() == handle;
}
m_currentColor = color;
diff --git a/src/Authoring/Studio/Render/StudioRendererTranslation.cpp b/src/Authoring/Studio/Render/StudioRendererTranslation.cpp
index 7dbe7288..02f1c8a6 100644
--- a/src/Authoring/Studio/Render/StudioRendererTranslation.cpp
+++ b/src/Authoring/Studio/Render/StudioRendererTranslation.cpp
@@ -2937,8 +2937,7 @@ void STranslation::RenderZoomRender(SZoomRender &inRender)
theRenderContext.SetClearColor(QT3DSVec4(.2f, .2f, .2f, 0.0f));
theRenderContext.Clear(qt3ds::render::NVRenderClearFlags(
qt3ds::render::NVRenderClearValues::Color | qt3ds::render::NVRenderClearValues::Depth));
- theRenderer.RunLayerRender(*theLayer, thePickSetup->m_ProjectionPreMultiply,
- thePickSetup->m_ViewProjection);
+ theRenderer.RunLayerRender(*theLayer, thePickSetup->m_ViewProjection);
theRenderContext.SetScissorTestEnabled(false);
}
}
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp b/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp
index c75c26ee..731d6929 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp
+++ b/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp
@@ -625,8 +625,6 @@ void Q3DSDistanceFieldRenderer::buildShaders()
if (m_shader.program) {
m_shader.mvp = NVRenderCachedShaderProperty<QT3DSMat44>(
"mvp", *m_shader.program);
- m_shader.modelView = NVRenderCachedShaderProperty<QT3DSMat44>(
- "modelView", *m_shader.program);
m_shader.textureWidth = NVRenderCachedShaderProperty<QT3DSI32>(
"textureWidth", *m_shader.program);
m_shader.textureHeight = NVRenderCachedShaderProperty<QT3DSI32>(
@@ -658,8 +656,6 @@ void Q3DSDistanceFieldRenderer::buildShaders()
if (m_dropShadowShader.program) {
m_dropShadowShader.mvp = NVRenderCachedShaderProperty<QT3DSMat44>(
"mvp", *m_dropShadowShader.program);
- m_dropShadowShader.modelView = NVRenderCachedShaderProperty<QT3DSMat44>(
- "modelView", *m_dropShadowShader.program);
m_dropShadowShader.textureWidth = NVRenderCachedShaderProperty<QT3DSI32>(
"textureWidth", *m_dropShadowShader.program);
m_dropShadowShader.textureHeight = NVRenderCachedShaderProperty<QT3DSI32>(
@@ -737,8 +733,7 @@ Q3DSDistanceFieldMesh Q3DSDistanceFieldRenderer::buildMesh(const GlyphInfo &glyp
void Q3DSDistanceFieldRenderer::renderMesh(
NVRenderInputAssembler *inputAssembler, NVRenderTexture2D *texture, const QT3DSMat44 &mvp,
- const QT3DSMat44 &modelView, QT3DSI32 textureWidth, QT3DSI32 textureHeight,
- QT3DSF32 fontScale, QT3DSVec4 color)
+ QT3DSI32 textureWidth, QT3DSI32 textureHeight, QT3DSF32 fontScale, QT3DSVec4 color)
{
NVRenderContext &renderContext = m_context->GetRenderContext();
renderContext.SetCullingEnabled(false);
@@ -753,7 +748,6 @@ void Q3DSDistanceFieldRenderer::renderMesh(
renderContext.SetActiveShader(m_shader.program);
m_shader.mvp.Set(mvp);
- m_shader.modelView.Set(modelView);
m_shader.textureWidth.Set(textureWidth);
m_shader.textureHeight.Set(textureHeight);
m_shader.fontScale.Set(fontScale);
@@ -766,8 +760,8 @@ void Q3DSDistanceFieldRenderer::renderMesh(
void Q3DSDistanceFieldRenderer::renderMeshWithDropShadow(
NVRenderInputAssembler *inputAssembler, NVRenderTexture2D *texture, const QT3DSMat44 &mvp,
- const QT3DSMat44 &modelView, QT3DSI32 textureWidth, QT3DSI32 textureHeight,
- QT3DSF32 fontScale, QT3DSVec2 shadowOffset, QT3DSVec4 color, QT3DSVec4 shadowColor)
+ QT3DSI32 textureWidth, QT3DSI32 textureHeight, QT3DSF32 fontScale, QT3DSVec2 shadowOffset,
+ QT3DSVec4 color, QT3DSVec4 shadowColor)
{
NVRenderContext &renderContext = m_context->GetRenderContext();
renderContext.SetCullingEnabled(false);
@@ -782,7 +776,6 @@ void Q3DSDistanceFieldRenderer::renderMeshWithDropShadow(
renderContext.SetActiveShader(m_dropShadowShader.program);
m_dropShadowShader.mvp.Set(mvp);
- m_dropShadowShader.modelView.Set(modelView);
m_dropShadowShader.textureWidth.Set(textureWidth);
m_dropShadowShader.textureHeight.Set(textureHeight);
m_dropShadowShader.fontScale.Set(fontScale);
@@ -856,6 +849,7 @@ size_t getTextHashValue(const SText &text)
hashCombine(hashValue, text.m_TextColor.x);
hashCombine(hashValue, text.m_TextColor.y);
hashCombine(hashValue, text.m_TextColor.z);
+ hashCombine(hashValue, text.m_TextColor.w);
hashCombine(hashValue, std::string(text.m_Font.c_str()));
hashCombine(hashValue, std::string(text.m_Text.c_str()));
hashCombine(hashValue, text.m_Elide);
@@ -887,14 +881,16 @@ size_t getGlyphHashValue(const GlyphInfo &glyph)
return hashValue;
}
-void Q3DSDistanceFieldRenderer::renderText(SText &text, const QT3DSMat44 &mvp,
- const QT3DSMat44 &modelView)
+void Q3DSDistanceFieldRenderer::renderText(SText &text, const QT3DSMat44 &mvp)
{
if (!m_shader.program)
buildShaders();
+ float alpha = text.m_GlobalOpacity * text.m_TextColor.w;
+ QT3DSVec4 textColor = QT3DSVec4(text.m_TextColor.getXYZ() * alpha, alpha);
int shadowRgb = int(100 - int(text.m_DropShadowStrength));
- QT3DSVec4 shadowColor(shadowRgb * 0.01f, shadowRgb * 0.01f, shadowRgb * 0.01f, 1);
+ QT3DSVec4 shadowColor(shadowRgb * 0.01f * alpha, shadowRgb * 0.01f * alpha,
+ shadowRgb * 0.01f * alpha, alpha);
size_t textHashValue = getTextHashValue(text);
if (!m_glyphCache.contains(textHashValue))
@@ -934,15 +930,15 @@ void Q3DSDistanceFieldRenderer::renderText(SText &text, const QT3DSMat44 &mvp,
STextureDetails textureDetails = it.key()->texture->GetTextureDetails();
if (text.m_DropShadow) {
- renderMeshWithDropShadow(mesh.inputAssembler, it.key()->texture, mvp, modelView,
+ renderMeshWithDropShadow(mesh.inputAssembler, it.key()->texture, mvp,
int(textureDetails.m_Width), int(textureDetails.m_Height),
glyphInfo.fontScale * float(m_pixelRatio),
QT3DSVec2(glyphInfo.shadowOffsetX, glyphInfo.shadowOffsetY),
- text.m_TextColor, shadowColor);
+ textColor, shadowColor);
} else {
- renderMesh(mesh.inputAssembler, it.key()->texture, mvp, modelView,
+ renderMesh(mesh.inputAssembler, it.key()->texture, mvp,
int(textureDetails.m_Width), int(textureDetails.m_Height),
- glyphInfo.fontScale * float(m_pixelRatio), text.m_TextColor);
+ glyphInfo.fontScale * float(m_pixelRatio), textColor);
}
m_renderedGlyphs += glyphHashValue;
@@ -951,11 +947,10 @@ void Q3DSDistanceFieldRenderer::renderText(SText &text, const QT3DSMat44 &mvp,
text.m_Bounds = NVBounds3(minimum, maximum);
}
-void Q3DSDistanceFieldRenderer::renderTextDepth(SText &text, const QT3DSMat44 &mvp,
- const QT3DSMat44 &modelView)
+void Q3DSDistanceFieldRenderer::renderTextDepth(SText &text, const QT3DSMat44 &mvp)
{
// TODO: Create a depth pass shader for distance field text
- renderText(text, mvp, modelView);
+ renderText(text, mvp);
}
void Q3DSDistanceFieldRenderer::setContext(IQt3DSRenderContext &context)
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h b/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h
index 0e037fd8..c82a0e80 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h
+++ b/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h
@@ -57,7 +57,6 @@ struct GlyphInfo {
struct Q3DSDistanceFieldShader {
NVRenderShaderProgram *program = nullptr;
NVRenderCachedShaderProperty<QT3DSMat44> mvp;
- NVRenderCachedShaderProperty<QT3DSMat44> modelView;
NVRenderCachedShaderProperty<QT3DSI32> textureWidth;
NVRenderCachedShaderProperty<QT3DSI32> textureHeight;
NVRenderCachedShaderProperty<QT3DSF32> fontScale;
@@ -68,7 +67,6 @@ struct Q3DSDistanceFieldShader {
struct Q3DSDistanceFieldDropShadowShader {
NVRenderShaderProgram *program = nullptr;
NVRenderCachedShaderProperty<QT3DSMat44> mvp;
- NVRenderCachedShaderProperty<QT3DSMat44> modelView;
NVRenderCachedShaderProperty<QT3DSI32> textureWidth;
NVRenderCachedShaderProperty<QT3DSI32> textureHeight;
NVRenderCachedShaderProperty<QT3DSF32> fontScale;
@@ -95,17 +93,16 @@ public:
const SText &textInfo);
void buildShaders();
Q3DSDistanceFieldMesh buildMesh(const GlyphInfo &glyphInfo, bool shadow);
- void renderMesh(NVRenderInputAssembler *inputAssembler,
- NVRenderTexture2D *texture, const QT3DSMat44 &mvp,
- const QT3DSMat44 &modelView, QT3DSI32 textureWidth,
- QT3DSI32 textureHeight, QT3DSF32 fontScale, QT3DSVec4 color);
+ void renderMesh(NVRenderInputAssembler *inputAssembler, NVRenderTexture2D *texture,
+ const QT3DSMat44 &mvp, QT3DSI32 textureWidth, QT3DSI32 textureHeight,
+ QT3DSF32 fontScale, QT3DSVec4 color);
void renderMeshWithDropShadow(NVRenderInputAssembler *inputAssembler,
NVRenderTexture2D *texture, const QT3DSMat44 &mvp,
- const QT3DSMat44 &modelView, QT3DSI32 textureWidth,
- QT3DSI32 textureHeight, QT3DSF32 fontScale,
- QT3DSVec2 shadowOffset, QT3DSVec4 color, QT3DSVec4 shadowColor);
- void renderText(SText &text, const QT3DSMat44 &mvp, const QT3DSMat44 &modelView);
- void renderTextDepth(SText &text, const QT3DSMat44 &mvp, const QT3DSMat44 &modelView);
+ QT3DSI32 textureWidth, QT3DSI32 textureHeight,
+ QT3DSF32 fontScale, QT3DSVec2 shadowOffset,
+ QT3DSVec4 color, QT3DSVec4 shadowColor);
+ void renderText(SText &text, const QT3DSMat44 &mvp);
+ void renderTextDepth(SText &text, const QT3DSMat44 &mvp);
void setContext(IQt3DSRenderContext &context);
QT3DS_IMPLEMENT_REF_COUNT_ADDREF_RELEASE_OVERRIDE(m_foundation.getAllocator())
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderer.h b/src/Runtime/Source/runtimerender/Qt3DSRenderer.h
index 684d15a9..db3eee83 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderer.h
+++ b/src/Runtime/Source/runtimerender/Qt3DSRenderer.h
@@ -182,8 +182,7 @@ namespace render {
// Testing function to allow clients to render a layer using a custom view project instead
// of the one that would be setup
// using the layer's camera in conjunction with the layer's position,scale.
- virtual void RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inProjection,
- const QT3DSMat44 &inViewProjection) = 0;
+ virtual void RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inViewProjection) = 0;
// This allocator is cleared every frame on BeginFrame. Objects constructed using this
// allocator
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
index f2f260fd..fff7e32f 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
@@ -434,12 +434,12 @@ namespace render {
#if QT_VERSION >= QT_VERSION_CHECK(5,12,2)
void SDistanceFieldRenderable::Render(const QT3DSVec2 &inCameraVec)
{
- m_distanceFieldText.renderText(m_text, m_mvp, m_modelView);
+ m_distanceFieldText.renderText(m_text, m_mvp);
}
void SDistanceFieldRenderable::RenderDepthPass(const QT3DSVec2 &inCameraVec)
{
- m_distanceFieldText.renderTextDepth(m_text, m_mvp, m_modelView);
+ m_distanceFieldText.renderTextDepth(m_text, m_mvp);
}
#endif
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h
index deca9c47..39e73e8e 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h
@@ -399,17 +399,14 @@ namespace render {
{
Q3DSDistanceFieldRenderer &m_distanceFieldText;
QT3DSMat44 m_mvp;
- QT3DSMat44 m_modelView;
SText &m_text;
SDistanceFieldRenderable(SRenderableObjectFlags flags, QT3DSVec3 worldCenterPt,
- SText &text, const NVBounds3 &bounds,
- const QT3DSMat44 &mvp, const QT3DSMat44 &modelView,
+ SText &text, const NVBounds3 &bounds, const QT3DSMat44 &mvp,
Q3DSDistanceFieldRenderer &distanceFieldText)
: SRenderableObject(flags, worldCenterPt, text.m_GlobalTransform, bounds)
, m_distanceFieldText(distanceFieldText)
, m_mvp(mvp)
- , m_modelView(modelView)
, m_text(text)
{
m_RenderableFlags.SetDefaultMaterialMeshSubset(false);
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
index 9afb255c..4c214b97 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
@@ -971,15 +971,14 @@ namespace render {
}
// This doesn't have to be cheap.
- void Qt3DSRendererImpl::RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inProjection,
- const QT3DSMat44 &inViewProjection)
+ void Qt3DSRendererImpl::RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inViewProjection)
{
SLayerRenderData *theData = GetOrCreateLayerRenderDataForNode(inLayer);
if (theData == NULL || theData->m_Camera == NULL) {
QT3DS_ASSERT(false);
return;
}
- theData->PrepareAndRender(inProjection, inViewProjection);
+ theData->PrepareAndRender(inViewProjection);
}
void Qt3DSRendererImpl::AddRenderWidget(IRenderWidget &inWidget)
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h
index 67130904..fd2c349c 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h
@@ -365,8 +365,7 @@ namespace render {
Option<NVRenderRectF> GetLayerRect(SLayer &inLayer) override;
- void RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inProjection,
- const QT3DSMat44 &inViewProjection) override;
+ void RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inViewProjection) override;
// Note that this allocator is completely reset on BeginFrame.
NVAllocatorCallback &GetPerFrameAllocator() override
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
index eb1563ee..362a6027 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
@@ -2157,8 +2157,7 @@ namespace render {
m_BoundingRectColor.setEmpty();
}
- void SLayerRenderData::PrepareAndRender(const QT3DSMat44 &inProjection,
- const QT3DSMat44 &inViewProjection)
+ void SLayerRenderData::PrepareAndRender(const QT3DSMat44 &inViewProjection)
{
TRenderableObjectList theTransparentObjects(m_TransparentObjects);
TRenderableObjectList theOpaqueObjects(m_OpaqueObjects);
@@ -2166,7 +2165,7 @@ namespace render {
theOpaqueObjects.clear();
m_ModelContexts.clear();
SLayerRenderPreparationResultFlags theFlags;
- PrepareRenderablesForRender(inProjection, inViewProjection, Empty(), 1.0, theFlags);
+ PrepareRenderablesForRender(inViewProjection, Empty(), 1.0, theFlags);
RenderDepthPass(false);
Render();
}
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h
index 6716eada..4e237b0b 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h
@@ -153,7 +153,7 @@ struct AdvancedBlendModes
// layer setup system. This assumes the client has setup the viewport, scissor, and render
// target
// the way they want them.
- void PrepareAndRender(const QT3DSMat44 &inProjection, const QT3DSMat44 &inViewProjection);
+ void PrepareAndRender(const QT3DSMat44 &inViewProjection);
SOffscreenRendererEnvironment CreateOffscreenRenderEnvironment() override;
IRenderTask &CreateRenderToTextureRunnable() override;
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
index a6e6b14f..72908544 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
@@ -362,7 +362,7 @@ namespace render {
}
bool SLayerRenderPreparationData::PrepareTextForRender(
- SText &inText, const QT3DSMat44 &inProjection, const QT3DSMat44 &inViewProjection,
+ SText &inText, const QT3DSMat44 &inViewProjection,
QT3DSF32 inTextScaleFactor, SLayerRenderPreparationResultFlags &ioFlags)
{
ITextTextureCache *theTextRenderer = m_Renderer.GetQt3DSContext().GetTextureCache();
@@ -385,14 +385,12 @@ namespace render {
SRenderableObject *theRenderable = nullptr;
#if QT_VERSION >= QT_VERSION_CHECK(5,12,2)
- QT3DSMat44 modelView = (inProjection.getInverse() * inViewProjection)
- * inText.m_GlobalTransform;
Q3DSDistanceFieldRenderer *distanceFieldText
= static_cast<Q3DSDistanceFieldRenderer *>(
m_Renderer.GetQt3DSContext().getDistanceFieldRenderer());
theRenderable = RENDER_FRAME_NEW(SDistanceFieldRenderable)(
theFlags, inText.GetGlobalPos(), inText, inText.m_Bounds, theMVP,
- modelView, *distanceFieldText);
+ *distanceFieldText);
#else
TTPathObjectAndTexture theResult
= theTextRenderer->RenderText(inText, inTextScaleFactor);
@@ -1016,13 +1014,11 @@ namespace render {
}
bool SLayerRenderPreparationData::PrepareRenderablesForRender(
- const QT3DSMat44 &inProjection, const QT3DSMat44 &inViewProjection,
- const Option<SClippingFrustum> &inClipFrustum,
+ const QT3DSMat44 &inViewProjection, const Option<SClippingFrustum> &inClipFrustum,
QT3DSF32 inTextScaleFactor, SLayerRenderPreparationResultFlags &ioFlags)
{
SStackPerfTimer __timer(m_Renderer.GetQt3DSContext().GetPerfTimer(),
"SLayerRenderData::PrepareRenderablesForRender");
- m_projection = inProjection;
m_ViewProjection = inViewProjection;
QT3DSF32 theTextScaleFactor = inTextScaleFactor;
bool wasDataDirty = false;
@@ -1046,8 +1042,7 @@ namespace render {
SText *theText = static_cast<SText *>(theNode);
theText->CalculateGlobalVariables();
if (theText->m_Flags.IsGloballyActive()) {
- bool wasTextDirty = PrepareTextForRender(*theText, inProjection,
- inViewProjection,
+ bool wasTextDirty = PrepareTextForRender(*theText, inViewProjection,
theTextScaleFactor, ioFlags);
wasDataDirty = wasDataDirty || wasTextDirty;
}
@@ -1369,7 +1364,6 @@ namespace render {
QT3DSF32 theTextScaleFactor = 1.0f;
if (m_Camera) {
- m_projection = m_Camera->m_Projection;
m_Camera->CalculateViewProjectionMatrix(m_ViewProjection);
theTextScaleFactor = m_Camera->GetTextScaleFactor(
thePrepResult.GetLayerToPresentationViewport(),
@@ -1386,7 +1380,6 @@ namespace render {
// constructor.
m_ClippingFrustum = SClippingFrustum(m_ViewProjection, nearPlane);
} else {
- m_projection = QT3DSMat44::createIdentity();
m_ViewProjection = QT3DSMat44::createIdentity();
}
@@ -1400,7 +1393,7 @@ namespace render {
m_ModelContexts.clear();
if (GetOffscreenRenderer() == false) {
bool renderablesDirty =
- PrepareRenderablesForRender(m_projection, m_ViewProjection,
+ PrepareRenderablesForRender(m_ViewProjection,
m_ClippingFrustum,
theTextScaleFactor, thePrepResult.m_Flags);
wasDataDirty = wasDataDirty || renderablesDirty;
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
index 05923e7f..5b8d6e10 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
@@ -270,7 +270,6 @@ namespace render {
TRenderableObjectList m_RenderedOpaqueObjects;
TRenderableObjectList m_RenderedTransparentObjects;
QT3DSMat44 m_ViewProjection;
- QT3DSMat44 m_projection;
SClippingFrustum m_ClippingFrustum;
Option<SLayerRenderPreparationResult> m_LayerPrepResult;
// Widgets drawn at particular times during the rendering process
@@ -325,16 +324,14 @@ namespace render {
const Option<SClippingFrustum> &inClipFrustum,
TNodeLightEntryList &inScopedLights);
- bool PrepareTextForRender(SText &inText, const QT3DSMat44 &inProjection,
- const QT3DSMat44 &inViewProjection,
+ bool PrepareTextForRender(SText &inText, const QT3DSMat44 &inViewProjection,
QT3DSF32 inTextScaleFactor,
SLayerRenderPreparationResultFlags &ioFlags);
bool PreparePathForRender(SPath &inPath, const QT3DSMat44 &inViewProjection,
const Option<SClippingFrustum> &inClipFrustum,
SLayerRenderPreparationResultFlags &ioFlags);
// Helper function used during PRepareForRender and PrepareAndRender
- bool PrepareRenderablesForRender(const QT3DSMat44 &inProjection,
- const QT3DSMat44 &inViewProjection,
+ bool PrepareRenderablesForRender(const QT3DSMat44 &inViewProjection,
const Option<SClippingFrustum> &inClipFrustum,
QT3DSF32 inTextScaleFactor,
SLayerRenderPreparationResultFlags &ioFlags);
diff --git a/src/Runtime/res/effectlib/distancefieldtext.vert b/src/Runtime/res/effectlib/distancefieldtext.vert
index a3feb378..01024c6b 100644
--- a/src/Runtime/res/effectlib/distancefieldtext.vert
+++ b/src/Runtime/res/effectlib/distancefieldtext.vert
@@ -1,5 +1,4 @@
uniform highp mat4 mvp;
-uniform highp mat4 modelView;
uniform highp float fontScale;
uniform int textureWidth;
uniform int textureHeight;
@@ -59,7 +58,7 @@ highp float determinant(highp mat4 m)
void main()
{
- highp float scale = fontScale * sqrt(abs(determinant(modelView)));
+ highp float scale = fontScale * sqrt(abs(determinant(mvp)));
alphas = alphaRange(scale);
sampleCoord = tCoord * vec2(1.0 / highp float(textureWidth), 1.0 / highp float(textureHeight));
gl_Position = mvp * vec4(vCoord, 1.0);
diff --git a/src/Runtime/res/effectlib/distancefieldtext_core.vert b/src/Runtime/res/effectlib/distancefieldtext_core.vert
index 1ced295c..ce6a165c 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_core.vert
+++ b/src/Runtime/res/effectlib/distancefieldtext_core.vert
@@ -6,7 +6,6 @@ out vec2 sampleCoord;
out vec2 alphas;
uniform mat4 mvp;
-uniform mat4 modelView;
uniform int textureWidth;
uniform int textureHeight;
uniform float fontScale;
@@ -37,7 +36,7 @@ vec2 alphaRange(float scale)
void main()
{
- float scale = fontScale * sqrt(abs(determinant(modelView)));
+ float scale = fontScale * sqrt(abs(determinant(mvp)));
alphas = alphaRange(scale);
sampleCoord = tCoord * vec2(1.0 / float(textureWidth), 1.0 / float(textureHeight));
gl_Position = mvp * vec4(vCoord, 1.0);
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag b/src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag
index da51c5c2..94b277cd 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag
+++ b/src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag
@@ -15,7 +15,7 @@ void main()
clamp(shadowSampleCoord,
normalizedTextureBounds.xy,
normalizedTextureBounds.zw)).a);
- highp vec4 shadowPixel = shadowColor * shadowAlpha;
+ highp vec4 shadowPixel = color * shadowColor * shadowAlpha;
highp float textAlpha = smoothstep(alphas.x,
alphas.y,
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert b/src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert
index f645eb8c..f633aaa5 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert
+++ b/src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert
@@ -1,5 +1,4 @@
uniform highp mat4 mvp;
-uniform highp mat4 modelView;
uniform highp float fontScale;
uniform int textureWidth;
uniform int textureHeight;
@@ -63,7 +62,7 @@ highp float determinant(highp mat4 m)
void main()
{
- highp float scale = fontScale * sqrt(abs(determinant(modelView)));
+ highp float scale = fontScale * sqrt(abs(determinant(mvp)));
alphas = alphaRange(scale);
highp vec2 textureSizeMultiplier = vec2(1.0 / highp float(textureWidth),
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag b/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag
index 304b1874..4e46bd5f 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag
+++ b/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag
@@ -18,7 +18,7 @@ void main()
clamp(shadowSampleCoord,
normalizedTextureBounds.xy,
normalizedTextureBounds.zw)).r);
- vec4 shadowPixel = shadowColor * shadowAlpha;
+ vec4 shadowPixel = color * shadowColor * shadowAlpha;
float textAlpha = smoothstep(alphas.x,
alphas.y,
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert b/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert
index 3b1ba712..9be245b8 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert
+++ b/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert
@@ -9,7 +9,6 @@ out vec2 alphas;
out vec4 normalizedTextureBounds;
uniform mat4 mvp;
-uniform mat4 modelView;
uniform int textureWidth;
uniform int textureHeight;
uniform float fontScale;
@@ -41,7 +40,7 @@ vec2 alphaRange(float scale)
void main()
{
- float scale = fontScale * sqrt(abs(determinant(modelView)));
+ float scale = fontScale * sqrt(abs(determinant(mvp)));
alphas = alphaRange(scale);
vec2 textureSizeMultiplier = vec2(1.0 / float(textureWidth), 1.0 / float(textureHeight));