David Wendt
10e944a911
core: Turns out this is NOT redundant, I just misread the loop points
2022-09-15 19:14:41 -06:00
David Wendt
15b781ff04
chore: Remove old version of code left behind during rebasing
2022-09-15 19:14:41 -06:00
David Wendt
89fcca4f0b
core: Only mark the end of the frame if we hit the end of the tag stream.
2022-09-15 19:14:41 -06:00
David Wendt
f272cba7e6
core: If we're marked as finished, set the preload position to `u64::MAX` so that the repeated call protection trips
2022-09-15 19:14:41 -06:00
David Wendt
31802ea96f
chore: Reduce the number of necessary reads of the preload progress
2022-09-15 19:14:41 -06:00
David Wendt
ea284ed6bf
core: Preload should always start from the place we left off from.
2022-09-15 19:14:41 -06:00
David Wendt
afd29d19a4
core: Don't do any work if a clip is preloaded after finishing preload.
2022-09-15 19:14:41 -06:00
David Wendt
86f9ee4821
core: Add a "preload everything we know about" method
2022-09-15 19:14:41 -06:00
David Wendt
940de4bb7e
core: Add a special loader state for "downloaded but still parsing", and a function that ticks the preload.
...
Currently we do this automatically with no execution limit.
2022-09-15 19:14:41 -06:00
David Wendt
70e638b21f
core: Actually decrease the current action limit correctly
2022-09-15 19:14:41 -06:00
David Wendt
a05827eb90
core: Add a concept of an `ExecutionLimit` that checks both actions and runtime.
...
Actions are abstract; here we're using it to count bytes loaded (as a proxy for execution time). AVM code could potentially be adapted to count operations run instead.
2022-09-15 19:14:41 -06:00
David Wendt
c80abff3a9
core: Allow chunked preloading within a `DefineSprite` tag
2022-09-15 19:14:41 -06:00
David Wendt
3a265adcc4
core: Ensure empty movie clips are born preloaded.
...
An "empty clip" is any clip created by the `new` or `new_with_avm2` function, intended for dynamically-created movie clips with no association to a movie symbol.
2022-09-15 19:14:41 -06:00
David Wendt
f96017e6f3
avm2: Preload dynamically created movie clips
...
If we don't preload every movie clip we make, then they'll indicate themselves as not having been fully loaded yet, even though they are.
2022-09-15 19:14:41 -06:00
David Wendt
0f2237e171
core: Make frame loaded count no longer be off by one
...
The preload frame counting logic starts from one and continues to the end of the file, which results in a completely preloaded movie having one more frame "loaded" than there is in the file. This fixes that.
2022-09-15 19:14:41 -06:00
David Wendt
079b20a4f2
core: On unexpected EOF, mark the clip preload as completed
2022-09-15 19:14:41 -06:00
David Wendt
85cf383c84
core: Allow callers of `decode_tags` to flag when they would like decoding to stop
2022-09-15 19:14:41 -06:00
David Wendt
f7f5316b71
core: Prohibit playing movie clip frames that haven't been preloaded yet.
2022-09-15 19:14:41 -06:00
David Wendt
0ab10d9ab0
core: Make the preload chunk size configurable per caller.
...
Right now, we do not actually set a chunk limit, as we still need infrastructure for backgrounding the preload calls.
2022-09-15 19:14:41 -06:00
David Wendt
b5cbfaf093
core: When preloading other movie clips, forcibly preload them synchronously.
2022-09-15 19:14:41 -06:00
David Wendt
4e9bb3a173
core: Implement chunked decoding infrastructure.
...
We currently do not actually enforce a decoding limit; just add the functionality necessary to do so.
2022-09-15 19:14:41 -06:00
golfinq
c63f915ae2
avm2: Implement missing enums
2022-09-15 15:42:29 -07:00
Daniel Jacobs
cf721d45f9
Revert "web: Bump `wasm-bindgen` to 0.2.83"
...
This reverts commit 084b252030
.
2022-09-15 22:33:07 +02:00
relrelb
084b252030
web: Bump `wasm-bindgen` to 0.2.83
...
As usual, also bump its helper crates (`js-sys`, `web-sys` and
`wasm-bindgen-futures`) to the latest versions.
Due to https://github.com/rustwasm/wasm-bindgen/pull/3031 , use the
`serde-wasm-bindgen` crate as a replacement to the deprecated
`JsValue::from_serde` function.
2022-09-14 09:03:31 +03:00
Aaron Hill
e08f8d47ab
Allow clippy::needless_lifetimes to keep explicit 'gc parameter
...
This makes it clear what the lifetime is used for.
2022-09-13 18:55:08 -05:00
Aaron Hill
c4ce06a500
avm2: Use Box<dyn std::error::Error> for FromWStr impl
...
We don't currently have an `Activation` available in this
method, and we can't specify a 'gc lifetime without modifying
the trait itself.
2022-09-13 18:55:08 -05:00
Aaron Hill
3e65a554fa
avm2: Add 'gc lifetime parameter to avm2::Error
2022-09-13 18:55:08 -05:00
relrelb
b1760063ec
avm2: Implement `flash.filters.DisplacementMapFilterMode`
2022-09-13 21:20:55 +03:00
relrelb
5d5093f0fd
avm2: Implement `flash.filters.BitmapFilterType`
2022-09-13 21:20:55 +03:00
dependabot[bot]
cf26158030
build(deps): bump url from 2.2.2 to 2.3.1
...
Bumps [url](https://github.com/servo/rust-url ) from 2.2.2 to 2.3.1.
- [Release notes](https://github.com/servo/rust-url/releases )
- [Commits](https://github.com/servo/rust-url/compare/v2.2.2...v2.3.1 )
---
updated-dependencies:
- dependency-name: url
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
2022-09-13 09:42:27 +03:00
dependabot[bot]
69a43297df
build(deps): bump convert_case from 0.5.0 to 0.6.0
...
Bumps [convert_case](https://github.com/rutrum/convert-case ) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/rutrum/convert-case/releases )
- [Commits](https://github.com/rutrum/convert-case/commits )
---
updated-dependencies:
- dependency-name: convert_case
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
2022-09-13 09:20:12 +03:00
dependabot[bot]
e86b3f0efb
build(deps): bump percent-encoding from 2.1.0 to 2.2.0
...
Bumps [percent-encoding](https://github.com/servo/rust-url ) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/servo/rust-url/releases )
- [Commits](https://github.com/servo/rust-url/compare/percent-encoding-v2.1.0...v2.2.0 )
---
updated-dependencies:
- dependency-name: percent-encoding
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
2022-09-13 08:45:46 +03:00
Adrian Wielgosik
1c940009a1
avm2: Convert Capabilities, System to AS
2022-09-12 02:03:34 +02:00
TÖRÖK Attila
866f5c83c5
avm2: Add `flash.filters.BitmapFilterQuality`
2022-09-11 22:05:15 +02:00
Aaron Hill
fbcefc49dc
avm2: Fix "Property does not exist" error message
...
The `multiname` is now a `Gc`, so we need to dereference it
to get a useful Debug impl.
2022-09-11 11:34:52 -05:00
Aaron Hill
81a5f3f10a
core: Always check mergeAlpha in BitmapData.copyPixels
...
Previously, we would only use mergeAlpha if alphaBitmapData
and alphaPoint. However, mergeAlpha can be used even when
those parameters are null.
Some of the AVM1 argument handling was also incorrect - I've fixed
it, and extended the existing test with the output-based test
added for AVM2.
2022-09-11 11:12:09 -05:00
Aaron Hill
1d6b3b6f57
chore: Fix Clippy lints and allow `clippy::bool_to_int_with_if`
...
In several cases, the current code seems preferable to the
code required by `clippy::bool_to_int_with_if`. Let's suppress
this for now to get the build passing, and decide later if this
is something that we want to enable.
2022-09-11 13:31:46 +02:00
Nathan Adams
267ea0fd13
render: Introduced render commands, moved to a command list model instead of direct rendering
2022-09-11 09:07:53 +02:00
Aaron Hill
a638b0498e
core: Render Bitmap even if bitmap_data is None
...
We only need to access bitmap_data to check if we need to
update a dirty texture.
2022-09-11 07:06:11 +03:00
Aaron Hill
8370bc792d
core: Use correct background alpha in BitmapData.draw
...
Previously, we would always use a transparent background,
even if the BitmapData is not transparent. This would normally
be corrected on the next frame when we copied the pixels to the
CPU. However, if an SWF ran `BitmapData.draw` on every frame,
this would never be corrected.
2022-09-09 19:24:21 -05:00
Aaron Hill
5de21428f5
core: Update dirty BitmapData before rendering
...
We now have a `MutationContext` available, so this doesn't need
to be done in `run_frame`
2022-09-09 16:36:40 -07:00
Adrian Wielgosik
4421fbff6a
avm2: Convert all Qname::new(...).into() to Multiname::new() ( #7930 )
2022-09-09 23:33:30 +02:00
Aaron Hill
ca030169f7
avm2: Implement BitmapData.rect and stub BitmapData.applyFilter
...
These are the last BitmapData methods needed for Solarmax
(the victory screen after beating the last level now renders).
2022-09-09 13:05:13 -05:00
Aaron Hill
bb138d9082
avm2: Implement some of SharedObject
...
Our AVM2 `SharedObject` support is now *almost* equivalent
to our avm1 `SharedObject` support. We implement serialization
and deserialization for primitives, arrays, and `Object` instances
with local properties. We also implement serialization for `Date`,
but not `Xml` (since our AVM2 `Xml` class is just a stub at the moment).
This is enough to make 'This is the only level too' save level
progress to disk.
Currently, we always serialize to AMF3. When we implement
the `defaultObjectEncoding` and `objectEncoding`, we'll need
to adjust this.
2022-09-08 21:22:05 -05:00
Aaron Hill
c090fe30ad
core: Mark DisplayObject as non-removed when added to display list
...
An AVM2 movie can repeatedly remove and add a DisplayObject from/to
a parent. This was causing SolarMax to stop working after advancing
to the next level.
2022-09-08 18:19:25 -05:00
relrelb
7ec587355b
text: Store background and border colors as `swf::Color`
...
Instead of `u32`.
2022-09-08 08:44:50 +03:00
EmperorBale
ece4b9a76d
avm2: Small cleanup
2022-09-07 13:54:33 -07:00
EmperorBale
7da912bbb4
avm2: Only store stack traces if avm_debug is enabled
2022-09-07 13:54:33 -07:00
EmperorBale
a9d95b7d4e
core: Fix code generator creating invalid code
2022-09-07 13:54:33 -07:00
EmperorBale
53ae55ff6f
avm2: Improve stack trace output
2022-09-07 13:54:33 -07:00