summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-08-03 11:35:54 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-08-03 11:23:09 +0000
commit14db118c33617153fbb283bce9a4fb977e65d560 (patch)
tree8b95563ca6f9b1a2cc4c07bdf0bc6fec10bbfc3b /tests
parent59e4269998ed8f27e67bfcae21c5b966f0b23475 (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.effect97
-rw-r--r--tests/auto/effectparser/effectparser.qrc1
-rw-r--r--tests/auto/effectparser/tst_q3dseffectparser.cpp20
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"