diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-03 11:35:54 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-08-03 11:23:09 +0000 |
commit | 14db118c33617153fbb283bce9a4fb977e65d560 (patch) | |
tree | 8b95563ca6f9b1a2cc4c07bdf0bc6fec10bbfc3b /tests | |
parent | 59e4269998ed8f27e67bfcae21c5b966f0b23475 (diff) |
Add flags to Q3DSEffect and check for ReliesOnTime
Task-number: QT3DS-2025
Task-number: QT3DS-2023
Change-Id: Icd8e5190b078cd78ee13525c522097d94fe45ded
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/effectparser/data/Corona.effect | 97 | ||||
-rw-r--r-- | tests/auto/effectparser/effectparser.qrc | 1 | ||||
-rw-r--r-- | tests/auto/effectparser/tst_q3dseffectparser.cpp | 20 |
3 files changed, 118 insertions, 0 deletions
diff --git a/tests/auto/effectparser/data/Corona.effect b/tests/auto/effectparser/data/Corona.effect new file mode 100644 index 0000000..6b3d113 --- /dev/null +++ b/tests/auto/effectparser/data/Corona.effect @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Effect> + <MetaData> + <!--Creates a corona around a sprite.--> + <Property name="HBlurBias" formalName="Horizontal Blur" min="0" max="10" default="2" description="Amount of corona horizontally."/> + <Property name="VBlurBias" formalName="Vertical Blur" min="0" max="10" default="2" description="Amount of corona vertically."/> + <Property name="Trailfade" formalName="Fade Amount" min="0" max="1" default="0.8" description="0=no glow, 0.5=fade quickly, 1.0=persistent trails"/> + <Property name="GlowSampler" filter="nearest" clamp="clamp" type="Texture" /> + <Property name="GlowCol" formalName="Glow Color" type="Color" default="1 0.6 0.0" description="The color to use for the glow."/> + <Property name="NoiseSamp" formalName="Noise" filter="linear" clamp="repeat" default="./maps/effects/noise.dds" type="Texture" description="Texture to be used for the noise texture"/> + <Property name="NoiseScale" formalName="Noise Density" min="0" max="10" default="2" description="The density of the noise in corona. The higher the value, the denser and smaller of the noise; the lower the value, the bigger of the noise scale."/> + <Property name="NoiseBright" formalName="Noise Brightness" min="0" max="5" default="4" description="Brightness of the noise."/> + <Property name="NoiseRatio" formalName="Noise Amount" min="0" max="1" default=".15" description="Magnitude of the noise."/> + <Property name="CrawlLen" formalName="Crawl Length" min="0" max="1" default=".3" description="Length of the corona trail in animation."/> + <Property name="CrawlAngle" formalName="Crawl Angle" default="0" description="Angle of the corona trail in animation."/> + <Property name="Sprite" filter="nearest" clamp="clamp" type="Texture" /> + </MetaData> + <Shaders> + <Shared> +#include "blur.glsllib" +uniform float AppFrame; // frame number since app starts +uniform float FPS; + </Shared> + <Shader name="CORONA_HBLUR"> + <Shared> +varying vec2 crawl; // corona crawl direction and magnitude + </Shared> + <VertexShader> +void vert () +{ + SetupHorizontalGaussianBlur(Texture0Info.x, HBlurBias, TexCoord); + // compute crawl + float alpha = radians(CrawlAngle + 180.0); + crawl = vec2(CrawlLen * sin(alpha), CrawlLen * cos(alpha)); +} + </VertexShader> + <FragmentShader> +void frag() +{ + //Passing in 1.0 means the value will not get alpha-multiplied again + float OutCol = GaussianAlphaBlur( GlowSampler, 1.0 ); + OutCol *= Trailfade; // fade away glow color + OutCol += texture2D_0( TexCoord ).a; // add glow color in the original tex area + + vec2 nuv = NoiseScale * TexCoord3 + AppFrame / FPS * crawl; + vec4 noise = texture2D_NoiseSamp(fract(nuv)); + float ns = (1.0 - NoiseRatio) + NoiseRatio * NoiseBright * noise.x; + OutCol *= ns; + gl_FragColor = vec4( OutCol ); +} + </FragmentShader> + </Shader> + <Shader name="CORONA_VBLUR"> + <VertexShader> +void vert () +{ + SetupVerticalGaussianBlur( Texture0Info.y, VBlurBias, TexCoord ); +} + </VertexShader> + <FragmentShader> +void frag() // PS_Blur_Vertical_9tap +{ + float OutCol = GaussianAlphaBlur( Texture0, Texture0Info.z ); + gl_FragColor = OutCol * vec4(GlowCol, 1.0); +} + </FragmentShader> + </Shader> + <Shader name="CORONA_BLEND"> + <VertexShader> +void vert() +{ +} + </VertexShader> + <FragmentShader> +void frag () +{ + vec4 src = texture2D_0( TexCoord ); + vec4 dst = texture2D_Sprite(TexCoord); + colorOutput( src * (1.0 - dst.a) + dst ); +} + </FragmentShader> + </Shader> + </Shaders> + <Passes> + <Buffer name="glow_buffer" type="ubyte" format="rgba" filter="linear" wrap="clamp" size="0.55" lifetime="scene"/> + <Buffer name="temp_buffer" type="ubyte" format="rgba" filter="linear" wrap="clamp" size="0.55" lifetime="frame"/> + + <Pass shader="CORONA_HBLUR" input="[source]" output="temp_buffer"> + <BufferInput param="GlowSampler" value="glow_buffer"/> + </Pass> + <Pass shader="CORONA_VBLUR" input="temp_buffer" output="glow_buffer"/> + + <Pass shader="CORONA_BLEND" input="glow_buffer"> + <BufferInput param="Sprite" value="[source]"/> + </Pass> + </Passes> +</Effect> diff --git a/tests/auto/effectparser/effectparser.qrc b/tests/auto/effectparser/effectparser.qrc index c8b45f0..5d2011e 100644 --- a/tests/auto/effectparser/effectparser.qrc +++ b/tests/auto/effectparser/effectparser.qrc @@ -4,5 +4,6 @@ <file>data/Depth Of Field Bokeh.effect</file> <file>data/LightTable.effect</file> <file>data/Sepia.effect</file> + <file>data/Corona.effect</file> </qresource> </RCC> diff --git a/tests/auto/effectparser/tst_q3dseffectparser.cpp b/tests/auto/effectparser/tst_q3dseffectparser.cpp index 3c57180..be1ec80 100644 --- a/tests/auto/effectparser/tst_q3dseffectparser.cpp +++ b/tests/auto/effectparser/tst_q3dseffectparser.cpp @@ -46,6 +46,7 @@ private Q_SLOTS: void testRepeatedLoad(); void testValidateData(); void testGlobalSharedShaderSnippet(); + void testFlags(); }; tst_Q3DSEffectParser::tst_Q3DSEffectParser() @@ -177,6 +178,25 @@ void tst_Q3DSEffectParser::testGlobalSharedShaderSnippet() } } +void tst_Q3DSEffectParser::testFlags() +{ + Q3DSEffectParser parser; + bool ok = false; + Q3DSEffect effect = parser.parse(QStringLiteral(":/data/Sepia.effect"), &ok); + QVERIFY(ok); + QVERIFY(!effect.isNull()); + QVERIFY(!effect.flags().testFlag(Q3DSEffect::ReliesOnTime)); + + // Corona is one of the few effects that rely on AppFrame meaning a layer + // having that effect needs continuous updates even when nothing changes in + // the layer. + ok = false; + effect = parser.parse(QStringLiteral(":/data/Corona.effect"), &ok); + QVERIFY(ok); + QVERIFY(!effect.isNull()); + QVERIFY(effect.flags().testFlag(Q3DSEffect::ReliesOnTime)); +} + QTEST_APPLESS_MAIN(tst_Q3DSEffectParser) #include "tst_q3dseffectparser.moc" |