naga is currently lenient about some things which are invalid by
the WGSL spec. The Tint WGSL compiler disagreed, so these shaders
failed to compile in Chrome.
This interface handles returning a bitmap given an ID and is used
by the render backend to get the bitmap used for a bitmap fill.
This will allow for bitmap fills in the drawing API, as these will
manage their own list of bitmaps.
This also removes the MovieLibrary dependency from render backends
and will allow for better decoupling in the future.
Matrices in an SWF file store their scale/skew components in
in 16.16 format (fbits).
Split `ruffle_core::Matrix` and `swf::Matrix`. `swf::Matrix` now
stores its data as `Fixed16` instead of immediately converting to
`f32`.
Use the proper types for ColorTransform:
* Fixed8 (8.8) format for multiplicative component
* i16 format for additive component
This matches the behavior of Flash (for example, alpha only changes
in units of 1/256).
* #[derive(Collect)] should be before #[collect]
* Replace redunant `&buf[..]` with `buf`
* Changes most cases of UPPERCase to UpperCase
* Allow upper_case_acronym on most SWF types, as they are from
SWF spec/more annoying to change.
Some recent changes with lyon's API could cause Ruffle to draw extra
strokes when it sees two Move commands in a row -- an extra zero-length
stroke would appear. Let's merge adjacent Move commands in the
tessellator to avoid this issue.
(TODO: Add an example to visual_tests).
Switch to debug_assert! instead of assert! in mask checks to avoid
panicking (#1347). This will render incorrectly and still needs
to be fixed, but we should fail gracefully and avoid killing the
entire player.
Pass the movie library to `register_shape` methods so that bitmap
charcter IDs can be resolved immediately on the proper SWF.
This fixes#2037, which cause incorrect bitmaps to be used when
multiple movies were loaded.
On desktop, don't render while the window is minimized.
In the wgpu backend, don't panic if swap chain fails to grab a
texture. Instead recreate the swap chain and bail on the current
frame.
Fixes panic when minimizing with the wgpu vulkan backend (#2065).
Switch to a single render pass for the whole frame, as opposed to
a render pass per draw call. This should be a large improvement to
performance. This currently requires some unsafe to work around a
self-reference between RenderPass and CommandEncoder in Frame;
this could eventually be cleaned up by changing RenderBackend
to return a Frame object instead of using begin_frame/end_frame
pairs.
Also switch to using push constants for the transform/color
uniforms.
Add --timedemo for benchmarking, which will run the given SWF as
quickly as possible for 5000 frames or the end of the root
timeline, whichever comes first. The total duration will be output
upon completion.