Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
  • shocknovaa/vlc
  • gremlinflat/vlc
  • Pratham24D/vlc
  • hmaarrfk/vlc
412 results
Show changes
Commits on Source (7)
......@@ -342,8 +342,6 @@ libqt_plugin_la_SOURCES = \
util/model_recovery_agent.hpp \
util/vlcqtmessagehandler.cpp \
util/vlcqtmessagehandler.hpp \
util/qsgrectangularnoisenode.cpp \
util/qsgrectangularnoisenode.hpp \
widgets/native/animators.cpp \
widgets/native/animators.hpp \
widgets/native/customwidgets.cpp widgets/native/customwidgets.hpp \
......@@ -359,8 +357,7 @@ libqt_plugin_la_SOURCES = \
widgets/native/qvlcframe.hpp \
widgets/native/searchlineedit.cpp widgets/native/searchlineedit.hpp \
widgets/native/viewblockingrectangle.cpp widgets/native/viewblockingrectangle.hpp \
widgets/native/doubleclickignoringitem.hpp \
widgets/native/noiserectangle.cpp widgets/native/noiserectangle.hpp
widgets/native/doubleclickignoringitem.hpp
# Meta-object compilation
......@@ -506,8 +503,7 @@ nodist_libqt_plugin_la_SOURCES = \
widgets/native/navigation_attached.moc.cpp \
widgets/native/mlfolderseditor.moc.cpp \
widgets/native/searchlineedit.moc.cpp \
widgets/native/viewblockingrectangle.moc.cpp \
widgets/native/noiserectangle.moc.cpp
widgets/native/viewblockingrectangle.moc.cpp
nodist_libqt_plugin_la_SOURCES += \
dialogs/extended/ui_equalizer.h \
......@@ -1343,7 +1339,6 @@ libqt_plugin_la_SHADER := shaders/FadingEdge.frag \
shaders/FadingEdgeX.vert \
shaders/FadingEdgeY.vert \
shaders/Noise.frag \
shaders/Noise.vert \
shaders/RectFilter.frag \
shaders/SubTexture.vert \
shaders/PlayerBlurredBackground.frag \
......
......@@ -63,7 +63,6 @@
#include "widgets/native/csdthemeimage.hpp"
#include "widgets/native/navigation_attached.hpp"
#include "widgets/native/viewblockingrectangle.hpp"
#include "widgets/native/noiserectangle.hpp"
#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
#include "widgets/native/doubleclickignoringitem.hpp"
#else
......@@ -350,7 +349,6 @@ void MainUI::registerQMLTypes()
// @uri VLC.Widgets
qmlRegisterType<CSDThemeImage>(uri, versionMajor, versionMinor, "CSDThemeImage");
qmlRegisterType<ViewBlockingRectangle>( uri, versionMajor, versionMinor, "ViewBlockingRectangle" );
qmlRegisterType<NoiseRectangle>(uri, versionMajor, versionMinor, "NoiseRectangle");
qmlRegisterModule(uri, versionMajor, versionMinor);
qmlProtectModule(uri, versionMajor);
......
......@@ -152,7 +152,6 @@ moc_headers = files(
'widgets/native/mlfolderseditor.hpp',
'widgets/native/searchlineedit.hpp',
'widgets/native/viewblockingrectangle.hpp',
'widgets/native/noiserectangle.hpp',
)
if host_system == 'windows'
......@@ -478,8 +477,6 @@ some_sources = files(
'util/model_recovery_agent.hpp',
'util/vlcqtmessagehandler.cpp',
'util/vlcqtmessagehandler.hpp',
'util/qsgrectangularnoisenode.cpp',
'util/qsgrectangularnoisenode.hpp',
'widgets/native/animators.cpp',
'widgets/native/animators.hpp',
'widgets/native/customwidgets.cpp',
......@@ -499,8 +496,6 @@ some_sources = files(
'widgets/native/viewblockingrectangle.cpp',
'widgets/native/viewblockingrectangle.hpp',
'widgets/native/doubleclickignoringitem.hpp',
'widgets/native/noiserectangle.cpp',
'widgets/native/noiserectangle.hpp',
)
if host_system == 'windows'
......
......@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
layout(location = 0) in vec2 qt_TexCoord0;
layout(location = 0) out vec4 fragColor;
layout(std140, binding = 0) uniform buf {
......@@ -31,7 +33,14 @@ float rand(vec2 co){
}
void main() {
float r = rand(gl_FragCoord.xy * gl_FragCoord.wz) - 0.5;
float r = rand(qt_TexCoord0) - 0.5;
vec4 noise = vec4(r,r,r,1.0) * strength;
fragColor = noise * qt_Opacity;
// Noise should use additive blending (S + D) instead of the default source-over
// blending (S + D * (1 - S.a)). For that, set alpha to 0:
// Since it is premultiplied, alpha is already factored in the other channels
// and should be still respected. "If blending is enabled, source-over blending
// is used. However, additive blending can be achieved by outputting zero in the
// alpha channel."
fragColor.a = 0.0;
}
#version 440
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
layout(location = 0) in vec4 qt_Vertex;
layout(std140, binding = 0) uniform buf {
mat4 qt_Matrix;
float qt_Opacity;
float strength;
};
void main()
{
gl_Position = qt_Matrix * qt_Vertex;
}
......@@ -11,7 +11,6 @@ shader_sources = [
'FadingEdgeX.vert',
'FadingEdgeY.vert',
'Noise.frag',
'Noise.vert',
'RectFilter.frag',
'SubTexture.vert',
'PlayerBlurredBackground.frag',
......
......@@ -5,7 +5,6 @@
<file alias="FadingEdgeX.vert.qsb">FadingEdgeX.vert.qsb</file>
<file alias="FadingEdgeY.vert.qsb">FadingEdgeY.vert.qsb</file>
<file alias="Noise.frag.qsb">Noise.frag.qsb</file>
<file alias="Noise.vert.qsb">Noise.vert.qsb</file>
<file alias="RectFilter.frag.qsb">RectFilter.frag.qsb</file>
<file alias="SubTexture.vert.qsb">SubTexture.vert.qsb</file>
<file alias="PlayerBlurredBackground.frag.qsb">PlayerBlurredBackground.frag.qsb</file>
......
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "qsgrectangularnoisenode.hpp"
#include <QSGMaterial>
#include <QSGGeometry>
#include <QSGMaterialShader>
// Sometimes culling can cause issues with the Qt renderer
#define BACKFACE_CULLING 1
class QSGRectangularNoiseMaterialShader : public QSGMaterialShader
{
public:
QSGRectangularNoiseMaterialShader()
{
setShaderFileName(VertexStage, QStringLiteral(":/shaders/Noise.vert.qsb"));
setShaderFileName(FragmentStage, QStringLiteral(":/shaders/Noise.frag.qsb"));
// Indicate that we want to update the pipeline state, as we
// want an extraordinary blending algorithm/factor:
setFlag(QSGMaterialShader::UpdatesGraphicsPipelineState);
}
bool updateGraphicsPipelineState(QSGMaterialShader::RenderState &, QSGMaterialShader::GraphicsPipelineState *ps, QSGMaterial *, QSGMaterial *) override
{
/* The default blending operations of the scene graph renderer are:
* QRhiGraphicsPipeline::BlendFactor srcColor = QRhiGraphicsPipeline::One;
* QRhiGraphicsPipeline::BlendFactor dstColor = QRhiGraphicsPipeline::OneMinusSrcAlpha;
* QRhiGraphicsPipeline::BlendFactor srcAlpha = QRhiGraphicsPipeline::One;
* QRhiGraphicsPipeline::BlendFactor dstAlpha = QRhiGraphicsPipeline::OneMinusSrcAlpha;
* QRhiGraphicsPipeline::BlendOp opColor = QRhiGraphicsPipeline::Add;
* QRhiGraphicsPipeline::BlendOp opAlpha = QRhiGraphicsPipeline::Add;
*
* For the noise node, we want blend factors (One, One), instead of
* (One, OneMinusSrcAlpha). Here, we specify the factors that we
* want to use.
*/
bool changeMade = false;
#if BACKFACE_CULLING
if (Q_LIKELY(ps->cullMode != GraphicsPipelineState::CullBack))
{
// Culling is not necessary, but this rectangle will probably
// not be rotated more than 90 degrees in z axis, so we can
// have backface culling as optimization.
ps->cullMode = GraphicsPipelineState::CullBack;
changeMade = true;
}
#endif
if (Q_UNLIKELY(!ps->blendEnable)) // usually blending is enabled by other materials
{
ps->blendEnable = true;
changeMade = true;
}
if (Q_UNLIKELY(ps->srcColor != GraphicsPipelineState::One))
{
ps->srcColor = GraphicsPipelineState::One;
changeMade = true;
}
if (Q_LIKELY(ps->dstColor != GraphicsPipelineState::One))
{
ps->dstColor = GraphicsPipelineState::One;
changeMade = true;
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
// Qt 6.5.0 brings ability to use separate factor for alpha
if (Q_UNLIKELY(ps->srcAlpha != GraphicsPipelineState::One))
{
ps->srcAlpha = GraphicsPipelineState::One;
changeMade = true;
}
if (Q_LIKELY(ps->dstAlpha != GraphicsPipelineState::One))
{
ps->dstAlpha = GraphicsPipelineState::One;
changeMade = true;
}
#endif
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
// Before Qt 6.8.0, it is not possible to adjust the blend algorithm.
// But it is not really important, because the default has always been addition.
// And for the noise we want addition as well.
if (Q_UNLIKELY(ps->opColor != GraphicsPipelineState::BlendOp::Add))
{
ps->opColor = GraphicsPipelineState::BlendOp::Add;
changeMade = true;
}
if (Q_UNLIKELY(ps->opAlpha != GraphicsPipelineState::BlendOp::Add))
{
ps->opAlpha = GraphicsPipelineState::BlendOp::Add;
changeMade = true;
}
#endif
return changeMade;
}
bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
{
assert(dynamic_cast<QSGRectangularNoiseMaterial*>(newMaterial));
assert(!oldMaterial || dynamic_cast<QSGRectangularNoiseMaterial*>(oldMaterial));
qintptr offset = 0;
QByteArray *buf = state.uniformData();
// qt_Matrix:
if (state.isMatrixDirty())
{
const QMatrix4x4 m = state.combinedMatrix();
const size_t size = 64;
memcpy(buf->data() + offset, m.constData(), size);
offset += size;
}
// qt_Opacity:
if (state.isOpacityDirty())
{
// For noise, maybe instead of the scene graph inherited opacity
// provided here, direct opacity should be used?
const float opacity = state.opacity();
const size_t size = 4;
memcpy(buf->data() + offset, &opacity, size);
offset += size;
}
// Noise strength:
const auto oldNoiseMaterial = static_cast<const QSGRectangularNoiseMaterial *>(oldMaterial);
const auto newNoiseMaterial = static_cast<const QSGRectangularNoiseMaterial *>(newMaterial);
if (!oldMaterial || (oldNoiseMaterial->strength() != newNoiseMaterial->strength()))
{
const float strength = newNoiseMaterial->strength();
const size_t size = 4;
memcpy(buf->data() + offset, &strength, size);
offset += size;
}
return offset > 0;
}
};
QSGRectangularNoiseMaterial::QSGRectangularNoiseMaterial()
{
setFlag(QSGMaterial::Blending);
}
QSGMaterialType *QSGRectangularNoiseMaterial::type() const
{
static QSGMaterialType type;
return &type;
}
QSGMaterialShader *QSGRectangularNoiseMaterial::createShader(QSGRendererInterface::RenderMode) const
{
return new QSGRectangularNoiseMaterialShader;
}
int QSGRectangularNoiseMaterial::compare(const QSGMaterial *other) const
{
assert(dynamic_cast<const QSGRectangularNoiseMaterial *>(other));
return static_cast<const QSGRectangularNoiseMaterial*>(other)->strength() - strength();
}
QSGRectangularNoiseNode::QSGRectangularNoiseNode()
: m_geometry(QSGGeometry::defaultAttributes_Point2D(), 4)
{
QSGGeometry::updateRectGeometry(&m_geometry, QRectF());
setMaterial(&m_material);
setGeometry(&m_geometry);
}
void QSGRectangularNoiseNode::setRect(const QRectF &_rect)
{
if (rect() == _rect)
return;
// We can use this instead of setting the geometry ourselves:
QSGGeometry::updateRectGeometry(&m_geometry, _rect);
markDirty(QSGNode::DirtyGeometry);
}
QRectF QSGRectangularNoiseNode::rect() const
{
const QSGGeometry::Point2D *vertexData = m_geometry.vertexDataAsPoint2D();
return QRectF(vertexData[0].x, vertexData[0].y,
vertexData[3].x - vertexData[0].x,
vertexData[3].y - vertexData[0].y);
}
float QSGRectangularNoiseNode::strength() const
{
return m_material.strength();
}
void QSGRectangularNoiseNode::setStrength(float strength)
{
if (qFuzzyCompare(m_material.strength(), strength))
return;
m_material.setStrength(strength);
markDirty(QSGNode::DirtyMaterial);
}
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef QSGRECTANGULARNOISENODE_HPP
#define QSGRECTANGULARNOISENODE_HPP
#include <QSGGeometryNode>
#include <QSGGeometry>
#include <QSGMaterial>
class QSGRectangularNoiseMaterial : public QSGMaterial
{
public:
QSGRectangularNoiseMaterial();
float strength() const { return m_strength; };
void setStrength(qreal strength) { m_strength = strength; };
QSGMaterialType *type() const override;
QSGMaterialShader *createShader(QSGRendererInterface::RenderMode renderMode) const override;
int compare(const QSGMaterial *other) const override;
private:
float m_strength = 0.2;
};
class QSGRectangularNoiseNode : public QSGGeometryNode
{
public:
QSGRectangularNoiseNode();
void setRect(const QRectF &rect);
QRectF rect() const;
float strength() const;
void setStrength(float strength);
private:
QSGGeometry m_geometry;
QSGRectangularNoiseMaterial m_material;
};
#endif // QSGRECTANGULARNOISENODE_HPP
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "noiserectangle.hpp"
#include "util/qsgrectangularnoisenode.hpp"
NoiseRectangle::NoiseRectangle()
{
const auto setDirty = [this]() {
m_dirty = true;
update();
};
connect(this, &QQuickItem::widthChanged, this, setDirty);
connect(this, &QQuickItem::heightChanged, this, setDirty);
connect(this, &NoiseRectangle::strengthChanged, this, setDirty);
}
QSGNode *NoiseRectangle::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
if (!oldNode)
{
oldNode = new QSGRectangularNoiseNode;
}
assert(dynamic_cast<QSGRectangularNoiseNode*>(oldNode));
const auto node = static_cast<QSGRectangularNoiseNode*>(oldNode);
if (m_dirty)
{
// Synchronize the item with the node
node->setStrength(m_strength);
node->setRect(boundingRect());
m_dirty = false;
}
return node;
}
qreal NoiseRectangle::strength() const
{
return m_strength;
}
void NoiseRectangle::setStrength(qreal newStrength)
{
if (qFuzzyCompare(m_strength, newStrength))
return;
m_strength = newStrength;
setFlag(ItemHasContents, !qFuzzyIsNull(m_strength));
emit strengthChanged();
}
void NoiseRectangle::componentComplete()
{
if (!qFuzzyIsNull(m_strength))
{
setFlag(ItemHasContents);
update();
}
QQuickItem::componentComplete();
}
/*****************************************************************************
* Copyright (C) 2024 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef NOISERECTANGLE_HPP
#define NOISERECTANGLE_HPP
#include <QQuickItem>
class NoiseRectangle : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(qreal strength READ strength WRITE setStrength NOTIFY strengthChanged FINAL)
QML_ELEMENT
public:
NoiseRectangle();
QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
qreal strength() const;
void setStrength(qreal newStrength);
signals:
void strengthChanged();
private:
bool m_dirty = false;
qreal m_strength = 0.2;
protected:
void componentComplete() override;
};
#endif // NOISERECTANGLE_HPP
......@@ -49,7 +49,7 @@ Widgets.BlurEffect {
color: Qt.alpha(root.tint, root.tintStrength)
}
Widgets.NoiseRectangle {
ShaderEffect {
id: noise
// Overlay for the blur effect:
......@@ -58,6 +58,8 @@ Widgets.BlurEffect {
visible: root.noiseStrength > 0.0
strength: root.noiseStrength
readonly property real strength: root.noiseStrength
fragmentShader: "qrc:///shaders/Noise.frag.qsb"
}
}