Commit Graph

8540 Commits

Author SHA1 Message Date
Jesse Talavera-Greenberg 17688dd652
core: Derive Clone and Copy in PlayerEvent (#9882) 2023-03-07 16:37:56 +00:00
Nathan Adams b15463d3fd avm2: Stub BitmapData.hitTest 2023-03-07 09:10:26 -06:00
Aaron Hill 1a7022c30b avm2: Consider noninteractive child/drawing when mouseEnabled=false
We still want to propagate these hits to the parent, which may
be able to handle them. My existing tests missed this case,
since all of the parent objects had content which was
behind the child content. When the only clickable content
comes from a child with 'mouseEnabled=false', we should
still fire an event targeting the parent (when applicable
based on the parent's flags).

This fixes dragging on the background (without any scenery present)
in Steambirds.
2023-03-07 08:14:22 -06:00
Lord-McSweeney 046af7bc4a avm2: Add EventPhase to globals.as
This was missed
2023-03-06 23:13:12 -06:00
Aaron Hill d72a8e7125 core: Run frames for 'orphan' AVM2 MovieClips
When a MovieClip is an 'orphan' (it has no parent),
it still has frames run (including frame scripts). Some SWFS
like SteamBirds and 'This is the Only Level TOO' rely on this behavior,
so we need to implement it.

The overall idea is straightforward - we keep a global list of
orphan movies, which we add to whenever we unset the parent for a movie.
This list stores weak references for consistency with Flash.
When we run a frame, we process entries in the root movie list,
in addition to the normal recursive processing from the `Stage`.

However, exactly matching Flash's output turned out to be quite tricky.
The particular sequence of calls I make in `run_all_phases_avm2` makes Ruffle
pass two complicated test cases, but there could still be lurking bugs.

This is enough to get SteamBirds to the first level (which doesn't
render due to a different error).
2023-03-06 20:53:35 -06:00
Nathan Adams c5f30dcae1 chore: Tell renovate to maintain lock files 2023-03-07 00:04:55 +01:00
Nathan Adams 026efe7f18 render: Moved out some Gradient fields into webgl as it's no longer needed in wgpu 2023-03-06 23:22:09 +01:00
Nathan Adams 0cca4983e4 wgpu: Merge gradient shaders together 2023-03-06 23:22:09 +01:00
Nathan Adams 622abe60d1 wgpu: Extract T->Color lookup from gradient shader to Mesh construction 2023-03-06 23:22:09 +01:00
Aaron Hill fde46a72a4 avm2: Fix mouse picking on MovieClip in 'button mode'
We were previously performing a redundant 'self.hit_test_shape'
call in 'avm2_mouse_pick'. All of the logic in that function
is handled in `avm2_mouse_pick.` Additionally, this call happened
before we tested out children, which would result in us targeting
a parent's drawing instead of aa child.
2023-03-06 15:57:46 -06:00
renovate[bot] 68078dcccc chore(deps): update node.js dependencies 2023-03-06 21:56:57 +01:00
Adrian Wielgosik be2d5faa6f avm2: Implement proxy.isAttribute() 2023-03-06 19:48:23 +01:00
Lord-McSweeney 3cb307bfb0
avm2: Implement String.toString (#9872)
Some SWFs use this property
2023-03-06 05:57:02 +00:00
EmperorBale 730115b1a0 tests: Extend proxy tests 2023-03-05 21:32:40 -08:00
EmperorBale 46ffd31f99 tests: Extend QName tests 2023-03-05 21:32:40 -08:00
EmperorBale 2b1918316d avm2: Require multinames to be passed explicitly to QNameObject 2023-03-05 21:32:40 -08:00
EmperorBale ac9106ccb4 chore: Cleanup multiname creation in XML 2023-03-05 21:32:40 -08:00
EmperorBale f95599b816 avm2: Store Multiname instead of QName in QNameObject
avm2: Fix QName constructor
2023-03-05 21:32:40 -08:00
renovate[bot] 130144a76d fix(deps): update rust dependencies 2023-03-05 20:43:46 -06:00
Aaron Hill 1e75e7e60a tests: Don't run render-required tests when WGPU is unavailable 2023-03-05 18:36:55 -06:00
Aaron Hill bb5e568333 avm2: Stop after the first DisplayObject-linked class in the chain
Surprisingly, Flash allows mutliple classes in an inheritance chain
to hav a linked `class_symbol`. When we instantiate a `DisplayObject`,
we need to stop at the first such `class_symbol` we find. This means
that any fields set from named children will *only* be set in the
first class we find, not in any of the parent classes (as their
corresponding library symbol will not be instantiated).

Previously, we would continue looping even after we found a
`class_symbol`, resulting in the furthest ancestor *winning*
the `set_object2` call.
2023-03-05 18:04:02 -06:00
Nathan Adams 806c0fe052 web: Only report log events to browser timing api if new `profiling` feature is enabled 2023-03-05 10:29:17 +01:00
Nathan Adams 25db37790c web: Also set up logging for Buffer::play() 2023-03-05 10:29:17 +01:00
Nathan Adams b38dbadad6 web: Fixed missing logs when using `log` 2023-03-05 10:29:17 +01:00
Nathan Adams d213bc6f7f web: Make sure we set the log subscriber in futures 2023-03-05 10:29:17 +01:00
Lord-McSweeney b919889174 avm2: Stub DisplayObject.scale9Grid 2023-03-04 19:29:11 -08:00
Aaron Hill 830d5198f2 desktop: Actually use 'quality' flag
This was being completely ignored
2023-03-04 18:45:25 -06:00
Aaron Hill e6bbb627d7 avm2: Implement KeyboardEvent.keyLocation getter/setter 2023-03-04 18:30:12 -06:00
Nathan Adams 33064465b3 tests: Ignore stage3d_raytrace on WARP 2023-03-04 15:50:57 -06:00
relrelb 3967fe8e74 tests: Expand `movieclip_getbounds`
Add a case of uninitialized bounds.
2023-03-04 21:54:23 +02:00
relrelb 83c15b8033 render: Replace `BoundingBox` with `swf::Rectangle` 2023-03-04 21:54:23 +02:00
relrelb 5756c847cd swf: Make `Twips::new` a `const fn` 2023-03-04 21:54:23 +02:00
relrelb abcdc2a851 render: Enable `serde`'s `derive` feature
Otherwise `cargo check` fails when run right from the `render/`
directory.
2023-03-04 21:54:23 +02:00
Aria Aghaei 352ed20d34
desktop: Handle errors before detaching from console on Windows CLI (#9781)
Co-authored-by: relrelb <relrelbachar@gmail.com>
2023-03-04 12:33:26 +00:00
Aaron Hill 3c03a769dc avm2: Format Matrix3D.as 2023-03-03 18:32:04 -06:00
Aaron Hill a4c8f27743 avm2: Implement Matrix3D.appendScale
This is based off the the MIT-licensed OpenFL code, which
just needed a few tweaks to convert it from Haxe to ActionScript.
2023-03-03 18:32:04 -06:00
Aaron Hill 59f4953730 avm2: Adding missing AGAL files to 'stage3d_raytrace'
These aren't necessary to run the included test.swf,
but they are needed into order to rebuild it from test.fla
2023-03-03 18:11:10 -06:00
Aaron Hill 1ef539e31b avm2: Implement Capabilities.isDebugger and stub System.disposeXML
These are needed for Solarmax 2
2023-03-03 16:51:54 -06:00
Aaron Hill 2748b95c86 avm2: Improve Stage3D support for textures, register types, and opcodes
This is a very large diff, but most of it comes from test files and
output.

This PR ads partial support for the following Stage3D shader features:
* Normal (square), rectangle, and cube textures
* Varying and temporary registers
* Lots of opcodes

The combination of these allows us to get a raytracing program
fully working in Ruffle. I've included it as image test.
Currently, this test is very slow (about 90 seconds on my machine),
as the code I'm using (https://github.com/saharan/OGSL) includes
its own shader language and compiler. THe raytracing demo
first compiles its own shader language to AGAL, and then starts
rendering the scene.

Limitations:
* Many opcodes are still unimplemented
* Most non-default texture options (e.g. mipmaps) are not implemented
2023-03-03 15:58:46 -06:00
Aaron Hill 1d883688e0 avm2: Correctly check when toJSON is missing, and use vtable properties
We were previously calling `get_property` to determine if a `toJSON`
property exists, but that produces an error if the method is missing
on a sealed class.

Additionally, JSON serialization wasn't taking into account properties
from the vtable. All public properties (including fields, const fields,
and getter methods) get serialized.

Unfortunately, our vtable property order currently doesn't match
Flash's. I've hand-edited the test output for now (all of the actual
properties are there, just in a different order), and added a note
2023-03-03 15:34:26 -06:00
Adrian Wielgosik 1ba3ec0bf0 avm2: Implement BitmapData.getVector 2023-03-03 12:47:54 +01:00
Aaron Hill a07ff36726 avm2: Implement describeType
This includes all of the XML elements described in 'describeType' docs.
Unfortunately, the order of elements produced by Flash depends on
the iteration order of internal hashtables. As a result, the test
manually stringifies an XML object, sorting the stringified children,
to produce consistent output between Flash and Ruffle.
2023-03-02 20:37:59 -06:00
Daniel Jacobs 5944bae33b web: Log a message when the preloader configuration option is false 2023-03-02 10:51:36 +02:00
Daniel Jacobs 3051e66960 web: Mark shadow-DOM elements as readonly 2023-03-02 10:51:36 +02:00
Daniel Jacobs a63f520449 web: Change preloader name while keeping old name for compatibility 2023-03-02 10:51:36 +02:00
Lord-McSweeney a2150cbbbf avm2: Implement IExternalizable interface 2023-03-02 01:32:43 -06:00
Nathan Adams fcaa17308c avm2: Workaround haxe calling addChild(this) before super() 2023-03-02 00:38:24 +01:00
Aaron Hill 656ab8439c chore: Bump clap to 4.1.8 and re-enable nightly clippy on CI
Clap macros no longer produce `#[deny]`, so clippy passes
again on nightly.
2023-03-01 17:01:40 -06:00
Nathan Adams bcc4e63144 core: Inline to_un_multiplied_alpha_accurate 2023-03-01 23:24:35 +01:00
Nathan Adams 6bcb64e52a core: Use slightly more accurate to_un_multiplied_alpha version in copy_pixels to fix tests 2023-03-01 23:24:35 +01:00