From 655c1952563a31179fefb46eb178caa662bc3bee Mon Sep 17 00:00:00 2001 From: Jere Tuliniemi Date: Fri, 3 May 2019 15:31:34 +0300 Subject: Implement fixes to the distance field renderer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 Reviewed-by: Miikka Heikkinen Reviewed-by: Tomi Korpipää --- .../ClientDataModelBridge.cpp | 10 +++++++ .../ClientDataModelBridge/ClientDataModelBridge.h | 1 + .../Palettes/Inspector/InspectorControlView.cpp | 3 +- .../Studio/Render/StudioRendererTranslation.cpp | 3 +- .../runtimerender/Qt3DSDistanceFieldRenderer.cpp | 35 ++++++++++------------ .../runtimerender/Qt3DSDistanceFieldRenderer.h | 19 +++++------- src/Runtime/Source/runtimerender/Qt3DSRenderer.h | 3 +- .../rendererimpl/Qt3DSRenderableObjects.cpp | 4 +-- .../rendererimpl/Qt3DSRenderableObjects.h | 5 +--- .../rendererimpl/Qt3DSRendererImpl.cpp | 5 ++-- .../runtimerender/rendererimpl/Qt3DSRendererImpl.h | 3 +- .../Qt3DSRendererImplLayerRenderData.cpp | 5 ++-- .../Qt3DSRendererImplLayerRenderData.h | 2 +- ...Qt3DSRendererImplLayerRenderPreparationData.cpp | 17 ++++------- .../Qt3DSRendererImplLayerRenderPreparationData.h | 7 ++--- src/Runtime/res/effectlib/distancefieldtext.vert | 3 +- .../res/effectlib/distancefieldtext_core.vert | 3 +- .../effectlib/distancefieldtext_dropshadow.frag | 2 +- .../effectlib/distancefieldtext_dropshadow.vert | 3 +- .../distancefieldtext_dropshadow_core.frag | 2 +- .../distancefieldtext_dropshadow_core.vert | 3 +- 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( "mvp", *m_shader.program); - m_shader.modelView = NVRenderCachedShaderProperty( - "modelView", *m_shader.program); m_shader.textureWidth = NVRenderCachedShaderProperty( "textureWidth", *m_shader.program); m_shader.textureHeight = NVRenderCachedShaderProperty( @@ -658,8 +656,6 @@ void Q3DSDistanceFieldRenderer::buildShaders() if (m_dropShadowShader.program) { m_dropShadowShader.mvp = NVRenderCachedShaderProperty( "mvp", *m_dropShadowShader.program); - m_dropShadowShader.modelView = NVRenderCachedShaderProperty( - "modelView", *m_dropShadowShader.program); m_dropShadowShader.textureWidth = NVRenderCachedShaderProperty( "textureWidth", *m_dropShadowShader.program); m_dropShadowShader.textureHeight = NVRenderCachedShaderProperty( @@ -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 mvp; - NVRenderCachedShaderProperty modelView; NVRenderCachedShaderProperty textureWidth; NVRenderCachedShaderProperty textureHeight; NVRenderCachedShaderProperty fontScale; @@ -68,7 +67,6 @@ struct Q3DSDistanceFieldShader { struct Q3DSDistanceFieldDropShadowShader { NVRenderShaderProgram *program = nullptr; NVRenderCachedShaderProperty mvp; - NVRenderCachedShaderProperty modelView; NVRenderCachedShaderProperty textureWidth; NVRenderCachedShaderProperty textureHeight; NVRenderCachedShaderProperty 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 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( 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 &inClipFrustum, + const QT3DSMat44 &inViewProjection, const Option &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(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 m_LayerPrepResult; // Widgets drawn at particular times during the rendering process @@ -325,16 +324,14 @@ namespace render { const Option &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 &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 &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)); -- cgit v1.2.3