From 0392f8ea364ba0add53c4bb2fbbfbbe9227cc10a Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Mon, 4 Dec 2023 12:48:11 +0100 Subject: [PATCH] Qt6 supported --- playground/CMakeLists.txt | 5 +- playground/parrots/CMakeLists.txt | 2 +- playground/parrots/main.cpp | 71 +++++++++++--------- playground/parrots/shaders.qrc | 10 +++ playground/parrots/shaders/blur-vulkan.frag | 24 +++++++ playground/parrots/shaders/blur-vulkan.vert | 21 ++++++ playground/parrots/shaders/blur.frag | 15 +++++ playground/parrots/shaders/blur.frag.qsb | Bin 0 -> 1732 bytes playground/parrots/shaders/blur.vert | 12 ++++ playground/parrots/shaders/blur.vert.qsb | Bin 0 -> 1422 bytes playground/parrots/shaders/vulkan2qsb.sh | 9 +++ 11 files changed, 132 insertions(+), 37 deletions(-) create mode 100644 playground/parrots/shaders.qrc create mode 100644 playground/parrots/shaders/blur-vulkan.frag create mode 100644 playground/parrots/shaders/blur-vulkan.vert create mode 100644 playground/parrots/shaders/blur.frag create mode 100644 playground/parrots/shaders/blur.frag.qsb create mode 100644 playground/parrots/shaders/blur.vert create mode 100644 playground/parrots/shaders/blur.vert.qsb create mode 100755 playground/parrots/shaders/vulkan2qsb.sh diff --git a/playground/CMakeLists.txt b/playground/CMakeLists.txt index 98e4af85..8bab46b2 100644 --- a/playground/CMakeLists.txt +++ b/playground/CMakeLists.txt @@ -6,10 +6,7 @@ add_subdirectory(invoker) add_subdirectory(shadows) add_subdirectory(shapes) add_subdirectory(charts) - -if (QT_VERSION_MAJOR VERSION_LESS 6) - add_subdirectory(parrots) -endif() +add_subdirectory(parrots) if (BUILD_INPUTCONTEXT) add_subdirectory(inputpanel) diff --git a/playground/parrots/CMakeLists.txt b/playground/parrots/CMakeLists.txt index 2fa72156..94010312 100644 --- a/playground/parrots/CMakeLists.txt +++ b/playground/parrots/CMakeLists.txt @@ -4,6 +4,6 @@ ############################################################################ set(SOURCES main.cpp) -qt_add_resources(SOURCES images.qrc) +qt_add_resources(SOURCES images.qrc shaders.qrc) qsk_add_example(parrots ${SOURCES}) diff --git a/playground/parrots/main.cpp b/playground/parrots/main.cpp index bc2e3dc5..04404e93 100644 --- a/playground/parrots/main.cpp +++ b/playground/parrots/main.cpp @@ -23,31 +23,13 @@ #include #include -static const char* vertexShader = R"( - uniform highp mat4 qt_Matrix; - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - varying highp vec2 coord; - void main() { - coord = qt_MultiTexCoord0; - gl_Position = qt_Matrix * qt_Vertex; - })"; +#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) + #include +#else + #include +#endif -static const char* fragmentShader = R"( - varying highp vec2 coord; - uniform sampler2D source; - uniform lowp float qt_Opacity; - - void main() { - vec2 delta = vec2(0.01, 0.01); - gl_FragColor =(0.0538 * texture2D(source, coord - 3.182 * delta) - + 0.3229 * texture2D(source, coord - 1.364 * delta) - + 0.2466 * texture2D(source, coord) - + 0.3229 * texture2D(source, coord + 1.364 * delta) - + 0.0538 * texture2D(source, coord + 3.182 * delta)) * qt_Opacity; - })"; - -class ButtonBox: public QskLinearBox +class ButtonBox : public QskLinearBox { public: ButtonBox( QQuickItem* parent = nullptr ) @@ -67,8 +49,13 @@ class ShaderEffect : public QQuickShaderEffect ShaderEffect( QQuickItem* parent = nullptr ) : QQuickShaderEffect( parent ) { - setVertexShader( ::vertexShader ); - setFragmentShader( ::fragmentShader ); +#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) + setVertexShader( loadShader( ":/shaders/blur.vert" ) ); + setFragmentShader( loadShader( ":/shaders/blur.frag" ) ); +#else + setVertexShader( QUrl( "qrc:/shaders/blur.vert.qsb" ) ); + setFragmentShader( QUrl( "qrc:/shaders/blur.frag.qsb" ) ); +#endif m_source = new QQuickShaderEffectSource( this ); m_source->setLive( true ); @@ -80,17 +67,37 @@ class ShaderEffect : public QQuickShaderEffect QQuickItem* sourceItem() const { return m_source->sourceItem(); } protected: +#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) void geometryChanged( const QRectF& newRect, const QRectF& oldRect ) override { Inherited::geometryChanged( newRect, oldRect ); + updateSourceRect( newRect ); + } +#else + void geometryChange( const QRectF& newRect, const QRectF& oldRect ) override + { + Inherited::geometryChange( newRect, oldRect ); + updateSourceRect( newRect ); + } +#endif - auto sourceRect = newRect; - sourceRect = m_source->sourceItem()->mapRectFromItem( this, sourceRect ); - + private: + void updateSourceRect( const QRectF& rect ) + { + const auto sourceRect = m_source->sourceItem()->mapRectFromItem( this, rect ); m_source->setSourceRect( sourceRect ); } - private: +#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) + QByteArray loadShader( const char* path ) const + { + QFile f( path ); + f.open( QFile::ReadOnly ); + + return f.readAll(); + } +#endif + void setSource( QQuickShaderEffectSource* source ) { setProperty( "source", QVariant::fromValue( source ) ); @@ -138,10 +145,10 @@ class BackgroundItem : public QskControl } void timerEvent( QTimerEvent* ) override - { + { static int counter = 0; - const auto angle = counter++ / 50.0 * M_PI * 2.0 ; + const auto angle = counter++ / 50.0 * M_PI * 2.0; const auto x = std::cos( angle ); const auto y = std::sin( angle ); diff --git a/playground/parrots/shaders.qrc b/playground/parrots/shaders.qrc new file mode 100644 index 00000000..b1f60720 --- /dev/null +++ b/playground/parrots/shaders.qrc @@ -0,0 +1,10 @@ + + + + shaders/blur.vert + shaders/blur.frag + + shaders/blur.vert.qsb + shaders/blur.frag.qsb + + diff --git a/playground/parrots/shaders/blur-vulkan.frag b/playground/parrots/shaders/blur-vulkan.frag new file mode 100644 index 00000000..5f5c6d48 --- /dev/null +++ b/playground/parrots/shaders/blur-vulkan.frag @@ -0,0 +1,24 @@ +#version 440 + +layout(location = 0) in vec2 qt_TexCoord0; +layout(location = 0) out vec4 fragColor; + +layout(binding = 1) uniform sampler2D source; + +layout(std140, binding = 0) uniform buf +{ + mat4 qt_Matrix; + float qt_Opacity; + +} ubuf; + +void main() +{ + vec2 delta = vec2(0.01, 0.01); + + fragColor =(0.0538 * texture(source, qt_TexCoord0 - 3.182 * delta) + + 0.3229 * texture(source, qt_TexCoord0 - 1.364 * delta) + + 0.2466 * texture(source, qt_TexCoord0) + + 0.3229 * texture(source, qt_TexCoord0 + 1.364 * delta) + + 0.0538 * texture(source, qt_TexCoord0 + 3.182 * delta)) * ubuf.qt_Opacity; +} diff --git a/playground/parrots/shaders/blur-vulkan.vert b/playground/parrots/shaders/blur-vulkan.vert new file mode 100644 index 00000000..6ca0bd3c --- /dev/null +++ b/playground/parrots/shaders/blur-vulkan.vert @@ -0,0 +1,21 @@ +#version 440 + +layout(location = 0) in vec4 qt_Vertex; +layout(location = 1) in vec2 qt_MultiTexCoord0; + +layout(location = 0) out vec2 qt_TexCoord0; + +layout(std140, binding = 0) uniform buf +{ + mat4 qt_Matrix; + float qt_Opacity; +} ubuf; + +out gl_PerVertex { vec4 gl_Position; }; + +void main() +{ + qt_TexCoord0 = qt_MultiTexCoord0; + gl_Position = ubuf.qt_Matrix * qt_Vertex; +} + diff --git a/playground/parrots/shaders/blur.frag b/playground/parrots/shaders/blur.frag new file mode 100644 index 00000000..4202dce2 --- /dev/null +++ b/playground/parrots/shaders/blur.frag @@ -0,0 +1,15 @@ +varying highp vec2 qt_TexCoord0; + +uniform sampler2D source; +uniform lowp float qt_Opacity; + +void main() +{ + vec2 delta = vec2(0.01, 0.01); + + gl_FragColor =(0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta) + + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta) + + 0.2466 * texture2D(source, qt_TexCoord0) + + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta) + + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta)) * qt_Opacity; +} diff --git a/playground/parrots/shaders/blur.frag.qsb b/playground/parrots/shaders/blur.frag.qsb new file mode 100644 index 0000000000000000000000000000000000000000..6e909cc226091f079795e44a3ec739105fde33e8 GIT binary patch literal 1732 zcmV;#20Qrx02>T=ob6d(bJIo;zc>jlh7$f03T*|ZsSLr$viv7FF-a5tO<~f(8QK{) z<56tcsI{da$l(Y{VbCGs$cYnKk zx2p?bj2&c*jlmp&ImsTgfYsOvvsjNUG8g`Ntid!`i@{`n(_jMz8aU3HpkT5VS8j84 zVSZQD18j|TL7lO8;2FLzNm4NmAUwPeAORS+!B55xk;J?teKdSINh-^19hB;z60oNP zIv;ws-9Vwk%!fd_fL4dRFs4!%BReS$I}XsZA+ttf$vE0iKrZeO_ZY;Fh=*VupSSN- z?xp>pkv4L;J?sb@?Rz}I;yf&z9n*HiI%B69=4F)g<7flkkpBT;AbkR!7bElqvWxU- zN&XJdH|Tww)8lzjZ`GMmENX0lk%A=0)*hYCW z6_{s0K2FJvao!kYQsCpf0yM5AaK22=PJ=&jCeBfUCfYbmHpa-tyYNIjtIYIl!iGPgjALp@(f$OJ8H%{xPnAp=134api?=L=` z4{6-1smhCTNMjCv{N>jhA+5sv?T2s6lR%d#wlS_J_O?thApSh%^9JD~y+FKEKz~B{ z5B))Uk!aLkB3ZPThn&aQM)_e5{{+rB*~a}kNU@e-^&suf9IRn}PEu~>Xs^#uE<*Y& z>HkD~`yTNyKi?DY9O>cO=fK0*&y($Qq>H@wi9aFXe;C16BKQ|0_(|ejknk^&UQ)vU zh-_by@TZ86d-)ylJ|@4WB%e|dpDvS6q3tUqb6K)IO?*|deUyl5i z#GjCSnj^n(Z2@?AzHc&76N}^rp7mSA4{hBhUF750K0>^|pi+vWJB(4^Mxw#`Eo1b2 z@`>g7w(BSvO-rnMR^8^*BfIrzU1_#mGbn9g+YT@je&BWMfwIWudB44;v!)gbnGRFy3OKaMU7==RKDC)VQuFdFr zF_+2Z^;}B$+iKTtd1ht9uK@2@p zm?;*typ}Wa#X>HXf<gi_NNwJyAt-N4*uIJh|%?u#`xJf$TuyIAKvSVXSHlUusn553y+-V zepBn1U%}Dgr{Cxq9HZ7R4NwEDuia+Tw*s}UrQ})(Mai9rtdSBGv=X+6S%Fcea*;g> z&~Qc6QzbA1OQ{K=8Wou=?4vN$v>DiS@>{Mqd0|V{Q75Q;cK5-<+M?(Be(kQa-VG=p z1C#)H<>nWQ%gYazG!f7M8_V4wVnlKYEL0xWR!pyD1!RI3KMK?~bpV17d%!N`-%R&< z+jIbtytK%u8p-9}8$xr}tW91X>E$8uV*uzr_x9@gQ~dQbW(TYcADl9iOU}T3sEWX*)Z#wraKOLql!5 zb!S5zO?NCuf);OTXb^tQ2F-9+S68Q%y6XVx@L;F-c>)3P?csh+E8#t{AwB~AZ$Pyg zemR9)*zU!01qh6gxLhXHzruyy;ha;RJueOFp@JOpCgnyBliW*%531zYw4&NhdheI3 zp>9{Nh`PfqW|(Wt4yX~(q3&LL31Yab*lPx{6Y6Vh*ucA))P7vib+GM>^K(m=waA4{ a{Ot+HfWN#%`qYlHjOeHiAO8SIA=5v+#A%lR literal 0 HcmV?d00001 diff --git a/playground/parrots/shaders/blur.vert b/playground/parrots/shaders/blur.vert new file mode 100644 index 00000000..ae1e84a5 --- /dev/null +++ b/playground/parrots/shaders/blur.vert @@ -0,0 +1,12 @@ +uniform highp mat4 qt_Matrix; + +attribute highp vec4 qt_Vertex; +attribute highp vec2 qt_MultiTexCoord0; + +varying highp vec2 qt_TexCoord0; + +void main() +{ + qt_TexCoord0 = qt_MultiTexCoord0; + gl_Position = qt_Matrix * qt_Vertex; +} \ No newline at end of file diff --git a/playground/parrots/shaders/blur.vert.qsb b/playground/parrots/shaders/blur.vert.qsb new file mode 100644 index 0000000000000000000000000000000000000000..323177db02acfc44eef9665903512970cc0e7482 GIT binary patch literal 1422 zcmV;91#$WS03Nz{ob6fNPuo@$zxe=)DW&D3w4-a?(zOY#vViD1kp)rFYU@-)RS=pK zAr5$=Yn4Iq>JQIx7Pz3s>e}8Z2c@lA0Y5c43Ap7|SE8znDgX z!WIgHCAdcVi6P(`3HEZguU%9y%=RGW2FxzNJ)A$4P+2Lk4W`50h5TS(V}w|f(3iu> zG>L4o0}wJmgtKEZx)x^Tv_^*Rq0)zu0i8bySz3+w!^gy;nqm+H0eb@t}-n2*e|4SOZ1%N_Y_EF1AZ>Z0M4(% zY#8pCyIH`a?P21nKwn^@nQ*;A^eC+%Um^cOzCt<3kiK!!mk<09IT^!f?u(6?d2tF#vx@_(NEXXHQ9cct8YMe|{aUnHN-dcUF$^!pCQ`~)bB=bnVW zE8*@F?+?(6bb(~=OR@`+Y?16O5H{s}K%&l~=Wgcu{GsW3mSd}n<+7r9-1QBv?)eSn zjiSP6>3msz&9x1kyH>jrtTmdB&T(<`KsPLYTv1LcisIW=!*N?EtNQQ(ONY99Y}xzj zp=m53e%oxXJC0i~R}`ItzCE9t5p%NFaj$qPogDDOoGr4317my2SDV0U$H8Dv3@pwhug?pGHtnb}Uga(PodZM}T{ zYDZgl9naIA+Xp_UsFM=l`1Z4();Bj_JuOS|r5Kfviz2!dQ=2|d*y;?ehq;c_0A_1P zO4LbMeb6^t``;zl@|%Sy{D+A>F9vnh9g(Q~uB5845BsKO;au`5k+`Z1EA?A?xuxI#$#RBIfY|X)m{d}Oc~In8{C{ygH&*5?+i3cAQ~j=Ga=oc}yxz3- zR+V_&vs(49@uT$fD!dPQ_;POREz^URH`PF@lJbfb9V_qjnnmL1Wf?v1(+ahk@4->l zbPT&(+}-Wj4z=0=O%c>(#Ik$!eytXLStukdq#Xb`14%MDj}OS&L;wH) literal 0 HcmV?d00001 diff --git a/playground/parrots/shaders/vulkan2qsb.sh b/playground/parrots/shaders/vulkan2qsb.sh new file mode 100755 index 00000000..4b53dc70 --- /dev/null +++ b/playground/parrots/shaders/vulkan2qsb.sh @@ -0,0 +1,9 @@ +#! /bin/sh + +function qsbcompile { + qsbfile=`echo $1 | sed 's/-vulkan//'` + qsb --glsl 100es,120,150 --hlsl 50 --msl 12 -b -o ${qsbfile}.qsb $1 +} + +qsbcompile blur-vulkan.vert +qsbcompile blur-vulkan.frag