From 1c266cb041c9f4c34d8c93b28ba0a6bee5d870c2 Mon Sep 17 00:00:00 2001 From: kcz Date: Sat, 1 Feb 2025 18:29:24 -0500 Subject: [PATCH] test: Add test displayobject_z displayobject_z is the test for rendering with different tz values from a few places by the image comparison. --- tests/tests/swfs/avm2/displayobject_z/Test.as | 88 ++++++++++++++++++ .../avm2/displayobject_z/output.expected.png | Bin 0 -> 6253 bytes .../swfs/avm2/displayobject_z/output.txt | 20 ++++ .../tests/swfs/avm2/displayobject_z/test.swf | Bin 0 -> 1556 bytes .../tests/swfs/avm2/displayobject_z/test.toml | 8 ++ 5 files changed, 116 insertions(+) create mode 100644 tests/tests/swfs/avm2/displayobject_z/Test.as create mode 100644 tests/tests/swfs/avm2/displayobject_z/output.expected.png create mode 100644 tests/tests/swfs/avm2/displayobject_z/output.txt create mode 100644 tests/tests/swfs/avm2/displayobject_z/test.swf create mode 100644 tests/tests/swfs/avm2/displayobject_z/test.toml diff --git a/tests/tests/swfs/avm2/displayobject_z/Test.as b/tests/tests/swfs/avm2/displayobject_z/Test.as new file mode 100644 index 0000000000000..02ac4f037a69f --- /dev/null +++ b/tests/tests/swfs/avm2/displayobject_z/Test.as @@ -0,0 +1,88 @@ +package { + import flash.display.*; + import flash.text.*; + import flash.geom.*; + + [SWF(width="500", height="500")] + public class Test extends Sprite { + public function Test() { + super(); + + stage.scaleMode = StageScaleMode.NO_SCALE; + + testSetZ(); + trace(""); + + testImageComparison(); + trace(""); + + } + + private function testSetZ() : void { + var sprite: Sprite = new Sprite(); + + trace("// SetZ: default parameters"); + trace("sprite.z", sprite.z); + trace("sprite.transform.matrix", sprite.transform.matrix); + trace("sprite.transform.matrix3D", sprite.transform.matrix3D); + + trace("// SetZ: set .z=50"); + sprite.z = 50; + trace("sprite.z", sprite.z); + trace("sprite.transform.matrix", sprite.transform.matrix); + trace("sprite.transform.matrix3D", sprite.transform.matrix3D); + trace("sprite.transform.matrix3D.rawData", sprite.transform.matrix3D.rawData); + + trace("// SetZ: set .transform.matrix3D=null"); + sprite.transform.matrix3D = null; + trace("sprite.z", sprite.z); + trace("sprite.transform.matrix", sprite.transform.matrix); + trace("sprite.transform.matrix3D", sprite.transform.matrix3D); + + trace("// SetZ: set .transform.matrix=null"); + sprite.transform.matrix = null; + trace("sprite.z", sprite.z); + trace("sprite.transform.matrix", sprite.transform.matrix); + trace("sprite.transform.matrix3D", sprite.transform.matrix3D); + trace("sprite.transform.matrix3D.rawData", sprite.transform.matrix3D.rawData); + } + + private function testImageComparison() : void { + var s : Sprite = new Sprite(); + stage.addChild(s); + + for (var i:int = 0; i < 8; i++) { + // top-left + var bd1 : BitmapData = new BitmapData(100, 100, false, 0xFF00FF - 0x220000 * i); + var b1 : Bitmap = new Bitmap(bd1); + b1.z = 50 * i; + s.addChild(b1); + + // center + var bd2 : BitmapData = new BitmapData(100, 100, false, 0xFFFF00 - 0x220000 * i); + var b2 : Bitmap = new Bitmap(bd2); + b2.x = (stage.stageWidth - bd2.width) / 2; + b2.y = (stage.stageHeight - bd2.height) / 2; + b2.z = 50 * i; + s.addChild(b2); + + // bottom + var bd3 : BitmapData = new BitmapData(100, 100, false, 0x00FFFF - 0x000022 * i); + var b3 : Bitmap = new Bitmap(bd3); + b3.x = (stage.stageWidth - bd3.width) / 2; + b3.y = (stage.stageHeight - bd3.height); + b3.z = 50 * i; + s.addChild(b3); + } + + for (var j:int = 0; j < 100; j++) { + var bd4 : BitmapData = new BitmapData(100, 100, false, 0x000000); + var b4 : Bitmap = new Bitmap(bd4); + b4.x = stage.stageWidth - bd4.width; + b4.y = stage.stageHeight - bd4.height; + b4.z = 500 * j; + s.addChild(b4); + } + } + } +} diff --git a/tests/tests/swfs/avm2/displayobject_z/output.expected.png b/tests/tests/swfs/avm2/displayobject_z/output.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c916fd62b11d9ad4e4123632b8f11f7916243e04 GIT binary patch literal 6253 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 literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm2/displayobject_z/test.toml b/tests/tests/swfs/avm2/displayobject_z/test.toml new file mode 100644 index 0000000000000..31b949d6e1a74 --- /dev/null +++ b/tests/tests/swfs/avm2/displayobject_z/test.toml @@ -0,0 +1,8 @@ +num_frames = 1 + +[image_comparisons.output] +tolerance = 10 +max_outliers = 5000 # FIXME: High max_outliers. FP renders objects with a matrix3D transformation in a different way from 2D objects especially around the object edges. + +[player_options] +with_renderer = { optional = true, sample_count = 4 }