Commit Graph

7013 Commits

Author SHA1 Message Date
Aaron Hill adf6653807 swf: Write a non-zero 'index' value for true/false/undefined/null default values
A zero 'index' does not have a subsequent 'kind' field in the
written SWF. The 'index' field is not actually used for
true/false/undefined/null, so it can be anything as long
as it's non-zero.
2022-08-15 12:30:10 -07:00
Mike Welsh 82cc097084 web: Bump audio buffer size to 4096
Avoid stuttering on some browser & hardware configurations.
2022-08-14 20:07:05 -07:00
Aaron Hill 6f20e8882d avm2: Implement DisplayObject.transform and most of Transform
This PR implements the 'DisplayObject.transform' getters/setters,
and most of the getters/setters in the `Transform` class

From testing in FP, it appears that each call to the
'DisplayObject.transform' property produces a new
'Transform' instance, which is permanently tied to the
owner 'DisplayObject'. All of the getters/setters in
`Transform` operate directly on owner `DisplayObject`.
However, note that the `Matrix` and `ColorTransform`
valuse *produced* the getter are plain ActionScript objects,
and have no further tie to the `DisplayObject`.

Using the `DisplayObject.transform` setter results in
values being *copied* from the input `Transform` object.
The input object retains its original owner `DisplayObject`.

Not implemented:
* Transform.concatenatedColorTransform
* Transform.pixelBounds

When a DisplayObject is not a descendant of the stage,
the `concatenatedMatrix` property produces a bizarre matrix:
a scale matrix that the depends on the global state quality.
Any DisplayObject that *is* a descendant of the stage has
a `concatenatedMatrix` that does not depend on the stage quality.
I'm not sure why the behavior occurs - for now, I just manually
mimic the values prdduced by FP. However, these values may indicate
that we need to do some internal scaling based on stage quality values,
and then 'undo' this in certain circumstances when constructing
an ActionScript matrix.

Unfortunately, some of the computed 'concatenatedMatrix' values
are off by f32::EPSILON. This is likely due to us storing some
internal values in pixels rather than twips (the rounding introduced
by round-trip twips conversions could cause this slight difference0.
For now, I've opted to mark these tests as 'approximate'.

To support this, I've extended our test framework to support providing
a regex that matches floating-point values in the output. This allows
us to print out 'Matrix.toString()' and still perform approximate
comparisons between strings of the format
'(a=0, b=0, c=0, d=0, tx=0, ty=0)'
2022-08-14 19:12:25 -07:00
Nathan Adams c4488fc883 render: Removed common_tess and moved tessellator to render 2022-08-14 18:38:14 -07:00
Nathan Adams e1f38b26c0 render: Removed ruffle_core dep from all renderers 2022-08-14 18:38:14 -07:00
Nathan Adams 824b4aa8d1 render: Moved render backend from core to render 2022-08-14 18:38:14 -07:00
Nathan Adams 760da753fb render: Moved Transform from core to render 2022-08-14 18:38:14 -07:00
Nathan Adams f088d8ac3a render: Moved color_transform from core to render 2022-08-14 18:38:14 -07:00
Nathan Adams 35082b687f render: Moved shape_utils from core to render 2022-08-14 18:38:14 -07:00
Nathan Adams b3afb59b53 render: Moved BoundingBox from core to render 2022-08-14 18:38:14 -07:00
Nathan Adams 91a7047ebb render: Moved Matrix from core to render 2022-08-14 18:38:14 -07:00
Nathan Adams 9fd8fd938e render: Moved render utils from core to render 2022-08-14 18:38:14 -07:00
Nathan Adams bc0c7cbccb render: Made new render crate, moved Bitmap stuff to it 2022-08-14 18:38:14 -07:00
Nathan Adams 94282dfe73 core: Moved render utils into own module 2022-08-14 18:38:14 -07:00
Nathan Adams 0bb14193c6 core: Moved Bitmap into its own module for refactoring rendering 2022-08-14 18:38:14 -07:00
Nathan Adams beab50cde7 core: Moved NullRenderer into its own module in preparation for refactoring 2022-08-14 18:38:14 -07:00
relrelb d70697b4f3 web: Refactor `WebNavigatorBackend`
Store `base_url` as `Option<Url>` instead of `Option<String>`, so
we don't need to parse it on each URL resolve.
2022-08-14 17:49:05 -07:00
Aaron Hill a99c7e381b avm2: Improve `Debug` impl for `StageObject`
This builds off of the previous work for `ScriptObject` and
`ClassObject`. We now print both the class name and the stored
`DisplayObject`.
2022-08-14 15:31:53 -05:00
Aaron Hill d6532c87c2 avm2: Stub TimerEvent.updateAfterEvent
This is the last stub needed for Wonderputt to reach the
main game screen.

As far as I know, ActionScript cannot observe a frame being rendered,
so implementing this method isn't actually necessary for correctness.

The benefit of implementing this would be to make certain animations
appear smoother, since we'll render changes to the scene without
needing to wait for the next frame. However, actually rendering
*immediately* after the event would require some refactoring -
we have a `&mut UpdateContext` while running timers, but we'd need
to bail out and obtain a `&mut Player`.
2022-08-13 19:24:56 +02:00
Nathan Adams cebe11ee38 wgpu: Avoid panics when attempting to create a texture larger than the device supports 2022-08-13 02:35:30 -07:00
Aaron Hill ef4a955e65 avm2: Always get loaderInfo from the root object 2022-08-13 02:06:38 -07:00
relrelb 8a7e96b0d5 avm2: Split `names.rs`
Into `namespace.rs`, `multiname.rs` and `qname.rs`, for better code
organization.
2022-08-13 02:12:53 +03:00
Nathan Adams 7dff19b559 core: Use a fixed seed when using deterministic feature 2022-08-12 13:11:46 +03:00
Aaron Hill 4a42bae333 avm2: Fix ApplicationDomain property declarations
Many of the class property defintiions were wrong -
instance methods were defined as class properties,
and class properties were defined as instance properties.
2022-08-12 10:45:03 +02:00
Aaron Hill 91993eb872 avm2: Stub URLRequest.data
This allows Wonderputt to get further (it deliberately assigns
'null' to 'URLRequest.data'). We throw an exception for any other
value, to prevent confusing errors caused by attempting an
unexpected request to a web server with a missig body.
2022-08-12 10:14:36 +02:00
Aaron Hill 9d1f27484b avm2: Implement 'throw' opcode
We currently lack the ability to preserve the original
`Value<'gc>` in the error, so we're forced to stringify the error.

This means that only typeless 'catch' blocks will work properly -
however, they're the only kind of 'catch' block that we currently
implement. Implementing support for typed 'catch' blocks will naturally
allow us to preserve the original 'Value<'gc>' in the 'throw'
implementation, since we'll need to switch to a custom `Error<'gc>`
type.
2022-08-11 17:20:53 -05:00
Adrian Wielgosik 74b2dd6bb9 tests: Fix now-failing avm2 ExternalInterface test 2022-08-11 21:28:18 +02:00
Adrian Wielgosik 4a7cb51148 avm2: Make missing props on sealed classes throw properly 2022-08-11 21:28:18 +02:00
Aaron Hill 71571b9594 avm2: Add URLRequest.method and use it URLLoader 2022-08-11 19:50:58 +02:00
Aaron Hill ed0512ca9d avm2: Show class name in `ClassObject` Debug impl
Before: `ClassObject(GcCell(Gc { ptr: 0x7f69f8300a28 }))`
After:  `ClassObject { name: flash.net::URLRequest, ptr: 0x7fe9cc2e7820 }`
2022-08-11 18:54:11 +02:00
TÖRÖK Attila d5b86f60a1 avm2: Add `flash.system.LoaderContext`, stub `flash.system.SecurityDomain`
Also add AS stubs for the preexisting `flash.display.DisplayObjectContainer`
and `flash.system.ApplicationDomain` natively defined classes.
2022-08-11 10:01:03 +02:00
relrelb 98c0cab6aa ci: Check documentation
In order to prevent future warnings on malformed documentation comments.
2022-08-10 09:20:53 +03:00
dowgird b6fd670410 address review comments 2022-08-10 01:34:08 +02:00
dowgird 38f50f83ef removed a now unused function, added a test 2022-08-10 01:34:08 +02:00
dowgird e5b0937461 changed catch_scope() back to taking MutationContext 2022-08-10 01:34:08 +02:00
dowgird 5ccc981357 Used install_instance_slots() instead of adding slots manually 2022-08-10 01:34:08 +02:00
dowgird fb0a984415 Rebase and fix clippy warnings. 2022-08-10 01:34:08 +02:00
dowgird 31ed697acd Fixes from review 2022-08-10 01:34:08 +02:00
dowgird 26b41199fb avm2: Implemented newcatch and basic exception handling 2022-08-10 01:34:08 +02:00
Adrian Wielgosik 54f9824ce0 avm1: Update drag in stopDrag() in case it wasn't called before 2022-08-10 00:20:09 +02:00
Nathan Adams 07da3f6c0f exporter: Add --skip-unsupported to skip (and not crash) avm2 movies 2022-08-09 23:19:42 +02:00
Nathan Adams 6816d82394 exporter: Don't stop after one bad swf read 2022-08-09 23:19:42 +02:00
Nathan Adams 42e23a48d7 exporter: Use rayon to export files in parallel 2022-08-09 23:19:42 +02:00
Nathan Adams 4499a11c61 exporter: Use anyhow to enforce better error messages & Sendability 2022-08-09 23:19:42 +02:00
Nathan Adams 3d235ac58f wgpu: Make descriptors an Arc 2022-08-09 23:19:42 +02:00
Nathan Adams 08de63afb2 wgpu: Store Uniforms Buffer outside of Descriptor, so Descriptor can be immutable once again 2022-08-09 23:19:42 +02:00
Nathan Adams 9b33a18c7c wgpu: Store Globals outside of Descriptor, so Descriptor can be immutable once again 2022-08-09 23:19:42 +02:00
Nathan Adams 6db62106dc exporter: Catch panics and skip the file 2022-08-09 23:19:42 +02:00
Nathan Adams 8efd69b525 core: Track 'actions since timeout check' globally instead of per Activation 2022-08-09 20:56:18 +03:00
Nathan Adams fb1ebcb9cc avm1: loadMovieNum with blank url is an unload, not a load - fixes #7337 2022-08-09 18:53:57 +03:00