diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index 138835c8a5..54bdd9d9f5 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include "RenderablePolyLineEntityItem.h" @@ -46,6 +47,8 @@ render::ShapePipelinePointer PolyLinePayload::shapePipelineFactory(const render: slotBindings.insert(gpu::Shader::Binding(std::string("originalTexture"), PAINTSTROKE_TEXTURE_SLOT)); slotBindings.insert(gpu::Shader::Binding(std::string("polyLineBuffer"), PAINTSTROKE_UNIFORM_SLOT)); gpu::Shader::makeProgram(*program, slotBindings); + slotBindings.insert(gpu::Shader::Binding(std::string("fadeMaskMap"), PAINTSTROKE_TEXTURE_SLOT + 1)); + slotBindings.insert(gpu::Shader::Binding(std::string("fadeParametersBuffer"), PAINTSTROKE_UNIFORM_SLOT+1)); gpu::Shader::makeProgram(*fadeProgram, slotBindings); gpu::StatePointer state = gpu::StatePointer(new gpu::State()); @@ -59,7 +62,8 @@ render::ShapePipelinePointer PolyLinePayload::shapePipelineFactory(const render: } if (key.isFaded()) { - return std::make_shared(_fadePipeline, nullptr, nullptr, nullptr); + auto fadeEffect = DependencyManager::get(); + return std::make_shared(_fadePipeline, nullptr, fadeEffect->getBatchSetter(), fadeEffect->getItemUniformSetter()); } else { return std::make_shared(_pipeline, nullptr, nullptr, nullptr); } @@ -201,10 +205,7 @@ void RenderablePolyLineEntityItem::updateVertices() { } -void RenderablePolyLineEntityItem::update(const quint64& now) { - PolyLineUniforms uniforms; - uniforms.color = toGlm(getXColor()); - memcpy(&_uniformBuffer.edit(), &uniforms, sizeof(PolyLineUniforms)); +void RenderablePolyLineEntityItem::updateMesh() { if (_pointsChanged || _strokeWidthsChanged || _normalsChanged) { QWriteLocker lock(&_quadReadWriteLock); _empty = (_points.size() < 2 || _normals.size() < 2 || _strokeWidths.size() < 2); @@ -213,7 +214,13 @@ void RenderablePolyLineEntityItem::update(const quint64& now) { updateGeometry(); } } +} +void RenderablePolyLineEntityItem::update(const quint64& now) { + PolyLineUniforms uniforms; + uniforms.color = toGlm(getXColor()); + memcpy(&_uniformBuffer.edit(), &uniforms, sizeof(PolyLineUniforms)); + updateMesh(); } bool RenderablePolyLineEntityItem::addToScene(const EntityItemPointer& self, @@ -230,13 +237,12 @@ bool RenderablePolyLineEntityItem::addToScene(const EntityItemPointer& self, transaction.resetItem(_myItem, renderPayload); transaction.addTransitionToItem(_myItem, render::Transition::ELEMENT_ENTER_DOMAIN); + updateMesh(); return true; } void RenderablePolyLineEntityItem::render(RenderArgs* args) { - checkFading(); - if (_empty) { return; } diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h index 8aaa05c0a5..4dda6da489 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h @@ -76,6 +76,7 @@ public: protected: void updateGeometry(); void updateVertices(); + void updateMesh(); static void createStreamFormat(); diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index ded0553fc1..4ab64a67e9 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -74,7 +74,7 @@ void RenderableShapeEntityItem::setUserData(const QString& value) { } bool RenderableShapeEntityItem::isTransparent() { - return getLocalRenderAlpha() < 1.0f || EntityItem::isTransparent(); + return getLocalRenderAlpha() < 1.0f; } namespace render { @@ -121,7 +121,6 @@ void RenderableShapeEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RenderableShapeEntityItem::render"); //Q_ASSERT(getType() == EntityTypes::Shape); Q_ASSERT(args->_batch); - checkFading(); if (!_procedural) { _procedural.reset(new Procedural(getUserData())); diff --git a/libraries/entities-renderer/src/paintStroke_fade.slf b/libraries/entities-renderer/src/paintStroke_fade.slf index cc9dec3338..cc037aeac4 100644 --- a/libraries/entities-renderer/src/paintStroke_fade.slf +++ b/libraries/entities-renderer/src/paintStroke_fade.slf @@ -44,11 +44,10 @@ void main(void) { vec4 texel = texture(originalTexture, varTexcoord); int frontCondition = 1 -int(gl_FrontFacing) * 2; vec3 color = varColor.rgb; - packDeferredFragmentTranslucentEmissive( + packDeferredFragmentTranslucent( interpolatedNormal * frontCondition, texel.a * varColor.a, - polyline.color * texel.rgb, + polyline.color * texel.rgb + fadeEmissive, vec3(0.01, 0.01, 0.01), - 10.0, - fadeEmissive); + 10.0); } diff --git a/libraries/render-utils/src/DeferredBufferWrite.slh b/libraries/render-utils/src/DeferredBufferWrite.slh index c83e49ba4c..2f6bfaeb61 100644 --- a/libraries/render-utils/src/DeferredBufferWrite.slh +++ b/libraries/render-utils/src/DeferredBufferWrite.slh @@ -77,9 +77,4 @@ void packDeferredFragmentTranslucent(vec3 normal, float alpha, vec3 albedo, vec3 } -void packDeferredFragmentTranslucentEmissive(vec3 normal, float alpha, vec3 albedo, vec3 fresnel, float roughness, vec3 emissive) { - packDeferredFragmentTranslucent(normal, alpha, albedo, fresnel, roughness); - _fragColor3 = vec4(emissive, 1.0); -} - <@endif@>