Commit Graph

491 Commits

Author SHA1 Message Date
relrelb c1c9542a95 wgpu: Introduce ShapeTessellator temporarily
Eventually it'll be replaced with common_tess's one.
2021-03-23 16:16:35 -07:00
relrelb 4513a5fbda wgpu: Extract tessellate_shape from register_shape_internal
This brings us closer towards common_tess.
2021-03-23 16:16:35 -07:00
relrelb e1734a2bec wgpu: Inline IncompleteDrawType::build 2021-03-23 16:16:35 -07:00
Mike Welsh e7d7e19c24 chore: Bump to wgpu 0.70 2021-02-27 17:52:05 -08:00
Mike Welsh 3099914374 chore: Appease clippy 2021-02-27 16:10:46 -08:00
Aaron Hill e69503ee67
chore: Derive `Pod` and `Zeroable` traits from `bytemuck`
This removes all `unsafe` impls of `bytemuck` traits
2021-02-16 20:34:12 -08:00
Mike Welsh e5fb1f09e7 chore: Appease clippy
* #[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.
2021-02-12 06:32:42 -08:00
Mike Welsh 60f29719d3 core: Fix stroke artifacts when using drawing API
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).
2021-02-05 14:54:55 -08:00
Mike Welsh a00d072eb1 chore: Appease clippy
Remove unused viewport_width/viewport_height from wgpu renderer.
2021-01-31 01:00:41 -08:00
Mike Welsh 09a48a71d8 render: Avoid asserts in masking state
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.
2021-01-14 14:18:14 -08:00
Mike Welsh 03b5edd4d1 render: Remove RenderBackend::draw_letterbox
Move letterbox draw logic to `Player`, using renderer.draw_rect
2021-01-07 11:46:07 -08:00
Mike Welsh 0754f0a3b3 render: Use u32 indices 2021-01-04 18:08:14 -08:00
relrelb 9a8edda8a6 chore: Update lyon to 0.17.1 2021-01-04 18:08:14 -08:00
Mike Welsh 9b6295f33a render: Pass library to RenderBackend::register_shape (fix #2037)
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.
2020-12-31 13:10:21 -08:00
Mike Welsh 6aafb46b49 desktop: Don't render while minimized
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).
2020-12-28 16:00:13 -08:00
Mike Welsh 9e46757f5f chore: Bump to wgpu-rs master 2020-12-27 00:44:11 -08:00
Mike Welsh 1b77f0bc20 wgpu: Create bind group for textured quad for each bitmap
Instead of creating a new bind group each time a bitmap is rendered,
create a bind group for each bitmap when it is registered.
2020-12-27 00:44:11 -08:00
Mike Welsh f343aff502 wgpu: Use a single render pass and push constants
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.
2020-12-27 00:44:11 -08:00
Mike Welsh 8222d3095b desktop: Add --timedemo benchmark
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.
2020-12-26 23:59:12 -08:00
Mike Welsh 67d95e0c00 exporter: Fix panic when using --frames (fix #1614) 2020-12-26 20:39:44 -08:00
Mike Welsh 99cfdd4ea7 render: Avoid excessive clones in register_bitmap calls 2020-12-15 00:04:51 -08:00
Mike Welsh 369c5bda56 render: Implement Bitmap smoothing property 2020-12-15 00:04:51 -08:00
Mike Welsh 4d4cf3c025 wgpu: Don't recreate texture on update 2020-12-15 00:04:51 -08:00
CUB3D 3556ffd778 chore: Fixes after rebase 2020-12-15 00:04:51 -08:00
CUB3D a92b8ffded core: All other changes from review 2020-12-15 00:04:51 -08:00
CUB3D ccd08f14d9 core: Fix naming and safety issues 2020-12-15 00:04:51 -08:00
CUB3D 6f91352d41 chore: Fix clippy lints 2020-12-15 00:04:51 -08:00
CUB3D b3dd5c0c0b core+renderer: Fix corner cases 2020-12-15 00:04:51 -08:00
CUB3D 9d46d67588 core+web+renderer: Add load/attach Bitmap and handling for invalid args with BitmapData 2020-12-15 00:04:51 -08:00
relrelb e5ace596ce chore: Update some dependencies
* js-sys and wasm-bindgen are now the currently latest releases.
* wgpu is not updated to the current master because it breaks
things up.
2020-12-11 11:28:33 -08:00
Mike Welsh 53212f192c chore: Appease clippy, squelch unnecessary_wraps lint 2020-11-24 18:59:42 -08:00
Mike Welsh ad4714f3b3 render: Avoid assert from lyon with small miter limits 2020-11-20 00:29:23 -08:00
Mike Welsh 81da730eb4 wgpu: Resolve MSAA once at frame end (fix #1427) 2020-10-29 13:27:47 -07:00
Nathan Adams bf4ed7cc22 render: Fix logic for resolution changes 2020-10-23 13:02:27 -07:00
Nathan Adams 20ff951d5e render: Split off common mesh binds into a mesh bind group for wgpu renderer 2020-10-23 13:02:27 -07:00
Nathan Adams c0de319fd2 render: Split up bind groups from pipelines for wgpu shapes in prep for them being refactored further 2020-10-23 13:02:27 -07:00
Nathan Adams bbd8fc768c render: Store view_matrix as a global in wgpu renderer, and only change it when changed 2020-10-17 04:16:24 -07:00
Nathan Adams a2d53df49c render: Store immutable part of wgpu rendering as a reusable object, to speed up exporting 2020-10-17 04:16:24 -07:00
Nathan Adams 4dd5fcfd6a render: Don't make a new sampler for each bitmap in wgpu renderer 2020-10-17 04:16:24 -07:00
Nathan Adams 7bd4590fc2 render: Remove unused register_encoder from wgpu. There's a built in staging encoder now. 2020-10-17 04:16:24 -07:00
Mike Welsh 89c1378569 wgpu: Use premultiplied alpha for bitmaps 2020-10-17 02:42:56 -07:00
Mike Welsh 4558be948e render: Fix masking issues on wgpu/webgl backends
Change the usage of the stencil buffer to avoid running out of
stencil bits when too many nested masks are active.

This also cleans things up on wgpu which requires us to make
pipeline states in advice; now we only need a few stencil states
for masking as opposed to hundreds.
2020-10-17 02:42:56 -07:00
Nathan Adams 3f46567fc1 render: Remove PowerPreference::Default as it's no longer in wgpu 2020-10-14 13:59:25 -07:00
Nathan Adams a2593b0d52 desktop: Expose wgpu tracing through a `render_trace` feature and `--trace-path` argument 2020-10-14 13:59:25 -07:00
Nathan Adams b68caebc23 render: Update wgpu to e3eadca8c6 2020-10-14 13:59:25 -07:00
Nathan Adams 536352a0d3 render: Move wgpu options out from desktop and into wgpu render crate 2020-10-10 13:43:18 -07:00
Nathan Adams e008603426 core: Add draw_rect to the render backend API 2020-09-17 16:03:16 -07:00
Mike Welsh 4190b1fc14 render: Backends use shape_utils::swf_glyph_to_shape 2020-09-15 02:34:32 -07:00
Nathan Adams 7273c85034 desktop: Add --power (or -p) option for choosing a graphics power preference (high for dedicated gpu, low for integrated, default for situational best) 2020-09-02 12:06:25 -07:00
Nathan Adams 3e09767c7a desktop: Add --graphics (or -g) option for choosing a graphics backend (vulkan/metal/dx12/dx11 right now) 2020-09-02 12:06:25 -07:00
Nathan Adams a191c79fca render: Workaround wgpu write-only stencil testing issue - fixes #1062 2020-08-31 05:45:42 -07:00
Nathan Adams 0b93e76a27 render: Add more debug labels to wgpu renderer 2020-08-27 11:02:28 -07:00
Nathan Adams 34fc3c574b render: Update wgpu to 0.6 2020-08-27 11:02:28 -07:00
Mike Welsh 7d1b3f86f5 render: Filter out consecutive MoveTo drawing commands
lyon would emit a small line segment if a stroke path had
consective MoveTo commands. For the lyon backends, filter out
consecutive MoveTos and only emit the final MoveTo command.

This fixes a small dot appearing in text fields using underlines.
2020-06-24 14:09:10 -07:00
Mike Welsh 103c7a98f0 wgpu: Implement linear RGB gradients 2020-05-22 11:03:16 -07:00
Nathan Adams eda862c719 swf: Merged core::Matrix into swf::Matrix 2020-05-20 14:54:41 +02:00
Nathan Adams 7ab6703fc9 render: Add RenderBackend::replace_shape method 2020-05-20 14:54:40 +02:00
Nathan Adams f7b5f14f65 core: Make RenderBack::register_bitmap* methods return a Result (fixes #531) 2020-05-19 07:12:36 -07:00
Mike Welsh 3b550a111f wgpu: Hook up gradient spread mode and focal point 2020-05-15 00:13:36 -07:00
Nathan Adams 4cbae59947 render: Give a useful error message if running without a compatible graphics device (#588) 2020-05-14 21:38:12 -07:00
Nathan Adams 0047546074 render: Ensure that the wgpu device is compatible with the window we're
going to render to
2020-05-14 21:38:12 -07:00
Nathan Adams 4f5e9cca1f render: Fix wgpu captures being the wrong image format 2020-05-14 01:19:23 -07:00
Mike Welsh 5d84d33710 render: Handle PNG data in DefineBitsJPEG tags (fix #530) 2020-05-13 00:15:09 -07:00
Nathan Adams fe4676a185 renderer: Don't crash when encountering unknown bitmap_fills 2020-05-11 01:09:07 -07:00
Nathan Adams 1bde973615 render: Use Rc<> for wgpu device and queue, so we can reuse them 2020-05-11 01:09:07 -07:00
Nathan Adams 9ab03b4da6 exporter: Added exporter tool for capturing images of swfs (related to #523) 2020-05-11 01:09:07 -07:00
Nathan Adams 2343074c56 core: Make RenderBackend downcastable 2020-05-11 01:09:07 -07:00
Nathan Adams a4905536b9 render: Add texture target for wgpu render backend 2020-05-11 01:09:07 -07:00
Nathan Adams 84b274618e render: Made wgpu renderer agnostic to if it's going to a window, prep for output-to-buffer 2020-05-11 01:09:07 -07:00
Nathan Adams 1aa3e423d7 render: Changed gradient uniform in wgpu shader to a SSBO instead of UBO, saving 192 bytes on each buffer 2020-05-10 23:48:11 -07:00
Nathan Adams 89202cd8db render: Prefer dedicated GPU over integrated GPU 2020-05-10 23:48:11 -07:00
Nathan Adams dcf845b26c render: Don't submit a command buffer for every image upload to wgpu 2020-05-10 23:48:11 -07:00
Nathan Adams c787e28fcd render: Introduce a DistilledShape and use that instead of swf::Shape for the rendering API 2020-05-10 22:03:56 -07:00
Nathan Adams 601715aa19 render: Merge begin_frame and clear as they're always called together 2020-05-10 22:03:56 -07:00
Nathan Adams 47a44a5fe8 desktop: Prime window with known width/height of the movie 2020-05-04 16:07:38 -07:00
Mike Welsh 5ead49a067 wgpu: Clamp minimum framebuffer size to 1 to avoid panic 2020-05-02 08:44:15 -07:00
Mike Welsh bfe57a3c66 wgpu: Toss out degenerate draws
wgpu would panic in this case, so filter out draws with < 3 indices.
2020-04-30 20:02:11 -07:00
Mike Welsh beb0eba3a3 chore: WGPURenderBackend -> WgpuRenderBackend 2020-04-30 20:00:07 -07:00
Mike Welsh 552ddd531b wgpu: Add MSAA support (default to 4x for now) 2020-04-30 19:56:07 -07:00
Nathan Adams 760677a2a1 render: Add From<ColorTransform> for ColorAdjustments uniforms 2020-04-30 16:40:08 +02:00
Nathan Adams 99d15aef0d render: Cache color transforms in wgpu backend, don't re-upload unchanged values 2020-04-30 16:33:41 +02:00
Nathan Adams 90195340c3 render: Implement letterbox on wgpu renderer 2020-04-30 16:15:35 +02:00
Nathan Adams 9599b2d09f render: Move some loose utility functions to utils.rs in wgpu renderer 2020-04-30 08:48:34 +02:00
Nathan Adams f4abf4b705 render: Split off shape/mesh code into its own file in wgpu renderer 2020-04-30 08:48:34 +02:00
Nathan Adams 1879d7f29e render: Implement render_bitmap for wgpu renderer 2020-04-30 08:48:34 +02:00
Nathan Adams 36d9d3ce4a render: Implement masks in wgpu renderer 2020-04-30 08:48:34 +02:00
Nathan Adams bdaf86dc3b render: Add Pipelines struct to group together wgpu pipelines 2020-04-30 08:48:34 +02:00
Nathan Adams dd1fa2700f render: Split off macros & pipeline creation from wgpu renderer 2020-04-30 08:48:34 +02:00
Nathan Adams c42333e254 render: Added feature render_debug_labels to enable debugging and profiling of wgpu renderer in external tools 2020-04-30 08:48:34 +02:00
Nathan Adams c2290ed5ef render: Remove dependency on winit from wgpu renderer 2020-04-30 08:48:33 +02:00
Nathan Adams f0445d94b8 render: Add wgpu-rs based renderer, used by desktop 2020-04-30 08:48:33 +02:00