From 824b4aa8d185814e2218acc99c01427eb901fd2c Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Sun, 14 Aug 2022 01:16:17 +0200 Subject: [PATCH] render: Moved render backend from core to render --- Cargo.lock | 3 ++- core/Cargo.toml | 3 --- core/src/backend.rs | 1 - core/src/backend/video.rs | 2 +- core/src/backend/video/software/mod.rs | 2 +- core/src/bitmap/bitmap_data.rs | 2 +- core/src/context.rs | 2 +- core/src/display_object/graphic.rs | 2 +- core/src/display_object/morph_shape.rs | 2 +- core/src/drawing.rs | 2 +- core/src/font.rs | 4 ++-- core/src/library.rs | 5 +++-- core/src/player.rs | 5 +++-- render/Cargo.toml | 4 ++++ render/canvas/src/lib.rs | 4 +++- .../render.rs => render/src/backend.rs | 22 ++++++++----------- .../render => render/src/backend}/null.rs | 11 +++++----- render/src/lib.rs | 1 + render/webgl/src/lib.rs | 4 +++- render/wgpu/src/lib.rs | 5 +++-- 20 files changed, 46 insertions(+), 40 deletions(-) rename core/src/backend/render.rs => render/src/backend.rs (87%) rename {core/src/backend/render => render/src/backend}/null.rs (87%) diff --git a/Cargo.lock b/Cargo.lock index b24c050ed..781bb85f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3010,7 +3010,6 @@ dependencies = [ name = "ruffle_core" version = "0.1.0" dependencies = [ - "approx", "bitflags", "bitstream-io", "build_playerglobal", @@ -3099,6 +3098,8 @@ dependencies = [ name = "ruffle_render" version = "0.1.0" dependencies = [ + "approx", + "downcast-rs", "flate2", "gc-arena", "gif", diff --git a/core/Cargo.toml b/core/Cargo.toml index fc400f6ee..858dc9596 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -53,9 +53,6 @@ version = "0.3.21" [target.'cfg(target_family = "wasm")'.dependencies.wasm-bindgen-futures] version = "0.4.32" -[dev-dependencies] -approx = "0.5.1" - [features] default = ["minimp3"] h263 = ["h263-rs", "h263-rs-yuv"] diff --git a/core/src/backend.rs b/core/src/backend.rs index e4447a42b..a94009f4f 100644 --- a/core/src/backend.rs +++ b/core/src/backend.rs @@ -1,7 +1,6 @@ pub mod audio; pub mod log; pub mod navigator; -pub mod render; pub mod storage; pub mod ui; pub mod video; diff --git a/core/src/backend/video.rs b/core/src/backend/video.rs index a28215c1e..d759b3b30 100644 --- a/core/src/backend/video.rs +++ b/core/src/backend/video.rs @@ -1,7 +1,7 @@ //! Video decoder backends -use crate::backend::render::RenderBackend; use generational_arena::{Arena, Index}; +use ruffle_render::backend::RenderBackend; use ruffle_render::bitmap::BitmapInfo; use swf::{VideoCodec, VideoDeblocking}; diff --git a/core/src/backend/video/software/mod.rs b/core/src/backend/video/software/mod.rs index 156af1167..719b9084a 100644 --- a/core/src/backend/video/software/mod.rs +++ b/core/src/backend/video/software/mod.rs @@ -1,10 +1,10 @@ //! Pure software video decoding backend. -use crate::backend::render::RenderBackend; use crate::backend::video::{ DecodedFrame, EncodedFrame, Error, FrameDependency, VideoBackend, VideoStreamHandle, }; use generational_arena::Arena; +use ruffle_render::backend::RenderBackend; use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo}; use swf::{VideoCodec, VideoDeblocking}; diff --git a/core/src/bitmap/bitmap_data.rs b/core/src/bitmap/bitmap_data.rs index 0122165e3..5ed7288d7 100644 --- a/core/src/bitmap/bitmap_data.rs +++ b/core/src/bitmap/bitmap_data.rs @@ -1,10 +1,10 @@ use gc_arena::Collect; use crate::avm2::{Object as Avm2Object, Value as Avm2Value}; -use crate::backend::render::RenderBackend; use crate::bitmap::color_transform_params::ColorTransformParams; use crate::bitmap::turbulence::Turbulence; use bitflags::bitflags; +use ruffle_render::backend::RenderBackend; use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle}; use std::ops::Range; diff --git a/core/src/context.rs b/core/src/context.rs index b83087ee8..c87654938 100644 --- a/core/src/context.rs +++ b/core/src/context.rs @@ -7,7 +7,6 @@ use crate::backend::{ audio::{AudioBackend, AudioManager, SoundHandle, SoundInstanceHandle}, log::LogBackend, navigator::NavigatorBackend, - render::RenderBackend, storage::StorageBackend, ui::{InputManager, UiBackend}, video::VideoBackend, @@ -27,6 +26,7 @@ use core::fmt; use gc_arena::{Collect, MutationContext}; use instant::Instant; use rand::rngs::SmallRng; +use ruffle_render::backend::RenderBackend; use ruffle_render::transform::TransformStack; use std::collections::{HashMap, VecDeque}; use std::sync::{Arc, Mutex, Weak}; diff --git a/core/src/display_object/graphic.rs b/core/src/display_object/graphic.rs index 89aad7006..83a770c9e 100644 --- a/core/src/display_object/graphic.rs +++ b/core/src/display_object/graphic.rs @@ -2,7 +2,6 @@ use crate::avm1::Object as Avm1Object; use crate::avm2::{ Activation as Avm2Activation, Object as Avm2Object, StageObject as Avm2StageObject, }; -use crate::backend::render::ShapeHandle; use crate::context::{RenderContext, UpdateContext}; use crate::display_object::{DisplayObjectBase, DisplayObjectPtr, TDisplayObject}; use crate::drawing::Drawing; @@ -10,6 +9,7 @@ use crate::prelude::*; use crate::tag_utils::SwfMovie; use crate::vminterface::{AvmType, Instantiator}; use gc_arena::{Collect, GcCell, MutationContext}; +use ruffle_render::backend::ShapeHandle; use std::cell::{Ref, RefMut}; use std::sync::Arc; diff --git a/core/src/display_object/morph_shape.rs b/core/src/display_object/morph_shape.rs index 8d78fdfd9..20ca3e099 100644 --- a/core/src/display_object/morph_shape.rs +++ b/core/src/display_object/morph_shape.rs @@ -1,10 +1,10 @@ -use crate::backend::render::{RenderBackend, ShapeHandle}; use crate::context::{RenderContext, UpdateContext}; use crate::display_object::{DisplayObjectBase, DisplayObjectPtr, TDisplayObject}; use crate::library::Library; use crate::prelude::*; use crate::tag_utils::SwfMovie; use gc_arena::{Collect, Gc, GcCell, MutationContext}; +use ruffle_render::backend::{RenderBackend, ShapeHandle}; use std::cell::{Ref, RefCell, RefMut}; use std::sync::Arc; use swf::{Fixed16, Fixed8, Twips}; diff --git a/core/src/drawing.rs b/core/src/drawing.rs index 7732c29a3..a7263c580 100644 --- a/core/src/drawing.rs +++ b/core/src/drawing.rs @@ -1,6 +1,6 @@ -use crate::backend::render::ShapeHandle; use crate::context::RenderContext; use gc_arena::Collect; +use ruffle_render::backend::ShapeHandle; use ruffle_render::bitmap::{BitmapInfo, BitmapSource}; use ruffle_render::bounding_box::BoundingBox; use ruffle_render::shape_utils::{DistilledShape, DrawCommand, DrawPath}; diff --git a/core/src/font.rs b/core/src/font.rs index ac73060a6..a45d3f3fe 100644 --- a/core/src/font.rs +++ b/core/src/font.rs @@ -1,8 +1,8 @@ -use crate::backend::render::{RenderBackend, ShapeHandle}; use crate::html::TextSpan; use crate::prelude::*; use crate::string::WStr; use gc_arena::{Collect, Gc, MutationContext}; +use ruffle_render::backend::{RenderBackend, ShapeHandle}; use ruffle_render::transform::Transform; use std::cell::{Cell, Ref, RefCell}; @@ -540,11 +540,11 @@ impl From for TextRenderSettings { #[cfg(test)] mod tests { - use crate::backend::render::{NullRenderer, RenderBackend}; use crate::font::{EvalParameters, Font}; use crate::player::{Player, DEVICE_FONT_TAG}; use crate::string::WStr; use gc_arena::{rootless_arena, MutationContext}; + use ruffle_render::backend::{null::NullRenderer, RenderBackend}; use std::ops::DerefMut; use swf::Twips; diff --git a/core/src/library.rs b/core/src/library.rs index 23d7703a4..b2404b40c 100644 --- a/core/src/library.rs +++ b/core/src/library.rs @@ -1,6 +1,6 @@ use crate::avm1::property_map::PropertyMap as Avm1PropertyMap; use crate::avm2::{ClassObject as Avm2ClassObject, Domain as Avm2Domain}; -use crate::backend::{audio::SoundHandle, render}; +use crate::backend::audio::SoundHandle; use crate::character::Character; use crate::display_object::{Bitmap, Graphic, MorphShape, TDisplayObject, Text}; use crate::font::{Font, FontDescriptor}; @@ -9,6 +9,7 @@ use crate::string::AvmString; use crate::tag_utils::SwfMovie; use crate::vminterface::AvmType; use gc_arena::{Collect, MutationContext}; +use ruffle_render::utils::remove_invalid_jpeg_data; use std::collections::HashMap; use std::sync::{Arc, Weak}; use swf::CharacterId; @@ -293,7 +294,7 @@ impl<'gc> MovieLibrary<'gc> { self.jpeg_tables = if data.is_empty() { None } else { - Some(render::remove_invalid_jpeg_data(&data[..]).to_vec()) + Some(remove_invalid_jpeg_data(&data[..]).to_vec()) } } diff --git a/core/src/player.rs b/core/src/player.rs index c03959e68..cf79856f5 100644 --- a/core/src/player.rs +++ b/core/src/player.rs @@ -11,7 +11,6 @@ use crate::backend::{ audio::{AudioBackend, AudioManager}, log::LogBackend, navigator::{NavigatorBackend, Request}, - render::RenderBackend, storage::StorageBackend, ui::{InputManager, MouseCursor, UiBackend}, video::VideoBackend, @@ -39,6 +38,7 @@ use gc_arena::{make_arena, ArenaParameters, Collect, GcCell}; use instant::Instant; use log::info; use rand::{rngs::SmallRng, SeedableRng}; +use ruffle_render::backend::RenderBackend; use ruffle_render::transform::TransformStack; use std::collections::{HashMap, VecDeque}; use std::ops::DerefMut; @@ -1827,6 +1827,7 @@ impl PlayerBuilder { /// Builds the player, wiring up the backends and configuring the specified settings. pub fn build(self) -> Arc> { use crate::backend::*; + use ruffle_render::backend::null::NullRenderer; let audio = self .audio .unwrap_or_else(|| Box::new(audio::NullAudioBackend::new())); @@ -1838,7 +1839,7 @@ impl PlayerBuilder { .unwrap_or_else(|| Box::new(navigator::NullNavigatorBackend::new())); let renderer = self .renderer - .unwrap_or_else(|| Box::new(render::NullRenderer::new())); + .unwrap_or_else(|| Box::new(NullRenderer::new())); let storage = self .storage .unwrap_or_else(|| Box::new(storage::MemoryStorageBackend::new())); diff --git a/render/Cargo.toml b/render/Cargo.toml index f246a80e9..ece516932 100644 --- a/render/Cargo.toml +++ b/render/Cargo.toml @@ -13,8 +13,12 @@ gif = "0.11.4" png = { version = "0.17.5" } flate2 = "1.0.24" smallvec = { version = "1.9.0", features = ["union"] } +downcast-rs = "1.2.0" [dependencies.jpeg-decoder] version = "0.2.6" default-features = false # can't use rayon on web +[dev-dependencies] +approx = "0.5.1" + diff --git a/render/canvas/src/lib.rs b/render/canvas/src/lib.rs index d62a271ab..1d773b338 100644 --- a/render/canvas/src/lib.rs +++ b/render/canvas/src/lib.rs @@ -1,10 +1,12 @@ use fnv::FnvHashMap; -use ruffle_core::backend::render::{NullBitmapSource, RenderBackend, ShapeHandle, Transform}; use ruffle_core::swf::{self, Color}; +use ruffle_render::backend::null::NullBitmapSource; +use ruffle_render::backend::{RenderBackend, ShapeHandle}; use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapSource}; use ruffle_render::color_transform::ColorTransform; use ruffle_render::matrix::Matrix; use ruffle_render::shape_utils::{DistilledShape, DrawCommand, LineScaleMode, LineScales}; +use ruffle_render::transform::Transform; use ruffle_web_common::{JsError, JsResult}; use wasm_bindgen::{Clamped, JsCast}; use web_sys::{ diff --git a/core/src/backend/render.rs b/render/src/backend.rs similarity index 87% rename from core/src/backend/render.rs rename to render/src/backend.rs index 391576b6e..b9f6a72f8 100644 --- a/core/src/backend/render.rs +++ b/render/src/backend.rs @@ -1,15 +1,13 @@ -mod null; +pub mod null; -pub use null::{NullBitmapSource, NullRenderer}; -pub use ruffle_render::utils::{determine_jpeg_tag_format, remove_invalid_jpeg_data}; - -use downcast_rs::Downcast; -use ruffle_render::bitmap::{Bitmap, BitmapHandle, BitmapInfo, BitmapSource}; -use ruffle_render::matrix::Matrix; -use ruffle_render::shape_utils::DistilledShape; -pub use ruffle_render::transform::Transform; -use ruffle_render::utils; -pub use swf; +use crate::bitmap::{Bitmap, BitmapHandle, BitmapInfo, BitmapSource}; +use crate::error::Error; +use crate::matrix::Matrix; +use crate::shape_utils::DistilledShape; +use crate::transform::Transform; +use crate::utils; +use downcast_rs::{impl_downcast, Downcast}; +use swf; pub trait RenderBackend: Downcast { fn set_viewport_dimensions(&mut self, width: u32, height: u32); @@ -103,7 +101,5 @@ pub trait RenderBackend: Downcast { } impl_downcast!(RenderBackend); -type Error = Box; - #[derive(Copy, Clone, Debug)] pub struct ShapeHandle(pub usize); diff --git a/core/src/backend/render/null.rs b/render/src/backend/null.rs similarity index 87% rename from core/src/backend/render/null.rs rename to render/src/backend/null.rs index 39ff23cfc..5171ee81a 100644 --- a/core/src/backend/render/null.rs +++ b/render/src/backend/null.rs @@ -1,8 +1,9 @@ -use crate::backend::render::{Error, RenderBackend, ShapeHandle}; -use ruffle_render::bitmap::{Bitmap, BitmapHandle, BitmapInfo, BitmapSource}; -use ruffle_render::matrix::Matrix; -use ruffle_render::shape_utils::DistilledShape; -use ruffle_render::transform::Transform; +use crate::backend::{RenderBackend, ShapeHandle}; +use crate::bitmap::{Bitmap, BitmapHandle, BitmapInfo, BitmapSource}; +use crate::error::Error; +use crate::matrix::Matrix; +use crate::shape_utils::DistilledShape; +use crate::transform::Transform; use swf::Color; pub struct NullBitmapSource; diff --git a/render/src/lib.rs b/render/src/lib.rs index 6cc14ec97..c289b46fd 100644 --- a/render/src/lib.rs +++ b/render/src/lib.rs @@ -1,3 +1,4 @@ +pub mod backend; pub mod bitmap; pub mod bounding_box; pub mod color_transform; diff --git a/render/webgl/src/lib.rs b/render/webgl/src/lib.rs index 2bfa2d5a4..005cc44e8 100644 --- a/render/webgl/src/lib.rs +++ b/render/webgl/src/lib.rs @@ -1,9 +1,11 @@ use bytemuck::{Pod, Zeroable}; use fnv::FnvHashMap; -use ruffle_core::backend::render::{NullBitmapSource, RenderBackend, ShapeHandle, Transform}; use ruffle_core::swf::{self, Color}; +use ruffle_render::backend::null::NullBitmapSource; +use ruffle_render::backend::{RenderBackend, ShapeHandle}; use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapSource}; use ruffle_render::shape_utils::DistilledShape; +use ruffle_render::transform::Transform; use ruffle_render_common_tess::{ Gradient as TessGradient, GradientType, ShapeTessellator, Vertex as TessVertex, }; diff --git a/render/wgpu/src/lib.rs b/render/wgpu/src/lib.rs index e5e90b2a6..0f8b324ad 100644 --- a/render/wgpu/src/lib.rs +++ b/render/wgpu/src/lib.rs @@ -7,11 +7,12 @@ use crate::utils::{create_buffer_with_data, format_list, get_backend_names}; use bytemuck::{Pod, Zeroable}; use enum_map::Enum; use fnv::FnvHashMap; -use ruffle_core::backend::render::{RenderBackend, ShapeHandle, Transform}; use ruffle_core::swf::{self, Color}; +use ruffle_render::backend::{RenderBackend, ShapeHandle}; use ruffle_render::bitmap::{Bitmap, BitmapHandle, BitmapSource}; use ruffle_render::color_transform::ColorTransform; use ruffle_render::shape_utils::DistilledShape; +use ruffle_render::transform::Transform; use ruffle_render_common_tess::{ DrawType as TessDrawType, Gradient as TessGradient, GradientType, ShapeTessellator, Vertex as TessVertex, @@ -901,7 +902,7 @@ impl RenderBackend for WgpuRenderBackend { let handle = ShapeHandle(self.meshes.len()); let mesh = self.register_shape_internal( (&shape).into(), - &ruffle_core::backend::render::NullBitmapSource, + &ruffle_render::backend::null::NullBitmapSource, ); self.meshes.push(mesh); handle