render: Made new render crate, moved Bitmap stuff to it

This commit is contained in:
Nathan Adams 2022-08-14 00:52:16 +02:00 committed by Mike Welsh
parent 94282dfe73
commit bc0c7cbccb
24 changed files with 64 additions and 31 deletions

14
Cargo.lock generated
View File

@ -3046,6 +3046,7 @@ dependencies = [
"rand", "rand",
"regress", "regress",
"ruffle_macros", "ruffle_macros",
"ruffle_render",
"ruffle_wstr", "ruffle_wstr",
"serde", "serde",
"serde_json", "serde_json",
@ -3097,6 +3098,15 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "ruffle_render"
version = "0.1.0"
dependencies = [
"gc-arena",
"log",
"swf",
]
[[package]] [[package]]
name = "ruffle_render_canvas" name = "ruffle_render_canvas"
version = "0.1.0" version = "0.1.0"
@ -3105,6 +3115,7 @@ dependencies = [
"js-sys", "js-sys",
"log", "log",
"ruffle_core", "ruffle_core",
"ruffle_render",
"ruffle_web_common", "ruffle_web_common",
"wasm-bindgen", "wasm-bindgen",
"web-sys", "web-sys",
@ -3117,6 +3128,7 @@ dependencies = [
"log", "log",
"lyon", "lyon",
"ruffle_core", "ruffle_core",
"ruffle_render",
] ]
[[package]] [[package]]
@ -3128,6 +3140,7 @@ dependencies = [
"js-sys", "js-sys",
"log", "log",
"ruffle_core", "ruffle_core",
"ruffle_render",
"ruffle_render_common_tess", "ruffle_render_common_tess",
"ruffle_web_common", "ruffle_web_common",
"wasm-bindgen", "wasm-bindgen",
@ -3147,6 +3160,7 @@ dependencies = [
"log", "log",
"raw-window-handle 0.4.3", "raw-window-handle 0.4.3",
"ruffle_core", "ruffle_core",
"ruffle_render",
"ruffle_render_common_tess", "ruffle_render_common_tess",
"web-sys", "web-sys",
"wgpu", "wgpu",

View File

@ -11,6 +11,7 @@ members = [
"scanner", "scanner",
"exporter", "exporter",
"render",
"render/canvas", "render/canvas",
"render/wgpu", "render/wgpu",
"render/common_tess", "render/common_tess",

View File

@ -17,6 +17,7 @@ indexmap = "1.9.1"
log = "0.4" log = "0.4"
minimp3 = { version = "0.5.1", optional = true } minimp3 = { version = "0.5.1", optional = true }
png = { version = "0.17.5" } png = { version = "0.17.5" }
ruffle_render = { path = "../render" }
ruffle_macros = { path = "macros" } ruffle_macros = { path = "macros" }
ruffle_wstr = { path = "../wstr" } ruffle_wstr = { path = "../wstr" }
swf = { path = "../swf" } swf = { path = "../swf" }

View File

@ -8,7 +8,7 @@ use crate::avm1::property_decl::{define_properties_on, Declaration};
use crate::avm1::{self, Object, ScriptObject, TObject, Value}; use crate::avm1::{self, Object, ScriptObject, TObject, Value};
use crate::avm_error; use crate::avm_error;
use crate::avm_warn; use crate::avm_warn;
use crate::backend::{navigator::NavigationMethod, render}; use crate::backend::navigator::NavigationMethod;
use crate::display_object::{ use crate::display_object::{
Bitmap, DisplayObject, EditText, MovieClip, TDisplayObject, TDisplayObjectContainer, Bitmap, DisplayObject, EditText, MovieClip, TDisplayObject, TDisplayObjectContainer,
}; };
@ -358,7 +358,7 @@ fn begin_bitmap_fill<'gc>(
} else { } else {
return Ok(Value::Undefined); return Ok(Value::Undefined);
}; };
let bitmap = render::BitmapInfo { let bitmap = ruffle_render::bitmap::BitmapInfo {
handle, handle,
width: bitmap_data.width() as u16, width: bitmap_data.width() as u16,
height: bitmap_data.height() as u16, height: bitmap_data.height() as u16,

View File

@ -1,4 +1,3 @@
mod bitmap;
mod null; mod null;
mod utils; mod utils;
@ -7,9 +6,9 @@ pub use utils::{determine_jpeg_tag_format, remove_invalid_jpeg_data};
use crate::matrix::Matrix; use crate::matrix::Matrix;
use crate::shape_utils::DistilledShape; use crate::shape_utils::DistilledShape;
pub use crate::{transform::Transform, Color}; pub use crate::transform::Transform;
pub use bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo, BitmapSource};
use downcast_rs::Downcast; use downcast_rs::Downcast;
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo, BitmapSource};
pub use swf; pub use swf;
pub trait RenderBackend: Downcast { pub trait RenderBackend: Downcast {
@ -79,10 +78,10 @@ pub trait RenderBackend: Downcast {
}) })
} }
fn begin_frame(&mut self, clear: Color); fn begin_frame(&mut self, clear: swf::Color);
fn render_bitmap(&mut self, bitmap: BitmapHandle, transform: &Transform, smoothing: bool); fn render_bitmap(&mut self, bitmap: BitmapHandle, transform: &Transform, smoothing: bool);
fn render_shape(&mut self, shape: ShapeHandle, transform: &Transform); fn render_shape(&mut self, shape: ShapeHandle, transform: &Transform);
fn draw_rect(&mut self, color: Color, matrix: &Matrix); fn draw_rect(&mut self, color: swf::Color, matrix: &Matrix);
fn end_frame(&mut self); fn end_frame(&mut self);
fn push_mask(&mut self); fn push_mask(&mut self);
fn activate_mask(&mut self); fn activate_mask(&mut self);

View File

@ -1,8 +1,8 @@
use crate::backend::render::bitmap::{Bitmap, BitmapHandle, BitmapInfo, BitmapSource};
use crate::backend::render::{Error, RenderBackend, ShapeHandle}; use crate::backend::render::{Error, RenderBackend, ShapeHandle};
use crate::matrix::Matrix; use crate::matrix::Matrix;
use crate::shape_utils::DistilledShape; use crate::shape_utils::DistilledShape;
use crate::transform::Transform; use crate::transform::Transform;
use ruffle_render::bitmap::{Bitmap, BitmapHandle, BitmapInfo, BitmapSource};
use swf::Color; use swf::Color;
pub struct NullBitmapSource; pub struct NullBitmapSource;

View File

@ -1,7 +1,8 @@
//! Video decoder backends //! Video decoder backends
use crate::backend::render::{BitmapInfo, RenderBackend}; use crate::backend::render::RenderBackend;
use generational_arena::{Arena, Index}; use generational_arena::{Arena, Index};
use ruffle_render::bitmap::BitmapInfo;
use swf::{VideoCodec, VideoDeblocking}; use swf::{VideoCodec, VideoDeblocking};
mod software; mod software;

View File

@ -1,10 +1,11 @@
//! Pure software video decoding backend. //! Pure software video decoding backend.
use crate::backend::render::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo, RenderBackend}; use crate::backend::render::RenderBackend;
use crate::backend::video::{ use crate::backend::video::{
DecodedFrame, EncodedFrame, Error, FrameDependency, VideoBackend, VideoStreamHandle, DecodedFrame, EncodedFrame, Error, FrameDependency, VideoBackend, VideoStreamHandle,
}; };
use generational_arena::Arena; use generational_arena::Arena;
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo};
use swf::{VideoCodec, VideoDeblocking}; use swf::{VideoCodec, VideoDeblocking};
mod decoders; mod decoders;

View File

@ -1,10 +1,11 @@
use gc_arena::Collect; use gc_arena::Collect;
use crate::avm2::{Object as Avm2Object, Value as Avm2Value}; use crate::avm2::{Object as Avm2Object, Value as Avm2Value};
use crate::backend::render::{Bitmap, BitmapFormat, BitmapHandle, RenderBackend}; use crate::backend::render::RenderBackend;
use crate::bitmap::color_transform_params::ColorTransformParams; use crate::bitmap::color_transform_params::ColorTransformParams;
use crate::bitmap::turbulence::Turbulence; use crate::bitmap::turbulence::Turbulence;
use bitflags::bitflags; use bitflags::bitflags;
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle};
use std::ops::Range; use std::ops::Range;
/// An implementation of the Lehmer/Park-Miller random number generator /// An implementation of the Lehmer/Park-Miller random number generator

View File

@ -5,12 +5,12 @@ use crate::avm2::{
Activation as Avm2Activation, ClassObject as Avm2ClassObject, Object as Avm2Object, Activation as Avm2Activation, ClassObject as Avm2ClassObject, Object as Avm2Object,
StageObject as Avm2StageObject, Value as Avm2Value, StageObject as Avm2StageObject, Value as Avm2Value,
}; };
use crate::backend::render::BitmapHandle;
use crate::context::{RenderContext, UpdateContext}; use crate::context::{RenderContext, UpdateContext};
use crate::display_object::{DisplayObjectBase, DisplayObjectPtr, TDisplayObject}; use crate::display_object::{DisplayObjectBase, DisplayObjectPtr, TDisplayObject};
use crate::prelude::*; use crate::prelude::*;
use crate::vminterface::{AvmType, Instantiator}; use crate::vminterface::{AvmType, Instantiator};
use gc_arena::{Collect, Gc, GcCell, MutationContext}; use gc_arena::{Collect, Gc, GcCell, MutationContext};
use ruffle_render::bitmap::BitmapHandle;
use std::cell::{Ref, RefMut}; use std::cell::{Ref, RefMut};
/// A Bitmap display object is a raw bitamp on the stage. /// A Bitmap display object is a raw bitamp on the stage.

View File

@ -4,7 +4,6 @@ use crate::avm1::{Object as Avm1Object, StageObject as Avm1StageObject};
use crate::avm2::{ use crate::avm2::{
Activation as Avm2Activation, Object as Avm2Object, StageObject as Avm2StageObject, Activation as Avm2Activation, Object as Avm2Object, StageObject as Avm2StageObject,
}; };
use crate::backend::render::BitmapInfo;
use crate::backend::video::{EncodedFrame, VideoStreamHandle}; use crate::backend::video::{EncodedFrame, VideoStreamHandle};
use crate::bounding_box::BoundingBox; use crate::bounding_box::BoundingBox;
use crate::context::{RenderContext, UpdateContext}; use crate::context::{RenderContext, UpdateContext};
@ -13,6 +12,7 @@ use crate::prelude::*;
use crate::tag_utils::{SwfMovie, SwfSlice}; use crate::tag_utils::{SwfMovie, SwfSlice};
use crate::vminterface::{AvmObject, AvmType, Instantiator}; use crate::vminterface::{AvmObject, AvmType, Instantiator};
use gc_arena::{Collect, GcCell, MutationContext}; use gc_arena::{Collect, GcCell, MutationContext};
use ruffle_render::bitmap::BitmapInfo;
use std::borrow::{Borrow, BorrowMut}; use std::borrow::{Borrow, BorrowMut};
use std::cell::{Ref, RefMut}; use std::cell::{Ref, RefMut};
use std::collections::{BTreeMap, BTreeSet}; use std::collections::{BTreeMap, BTreeSet};

View File

@ -1,8 +1,9 @@
use crate::backend::render::{BitmapInfo, BitmapSource, ShapeHandle}; use crate::backend::render::ShapeHandle;
use crate::bounding_box::BoundingBox; use crate::bounding_box::BoundingBox;
use crate::context::RenderContext; use crate::context::RenderContext;
use crate::shape_utils::{DistilledShape, DrawCommand, DrawPath}; use crate::shape_utils::{DistilledShape, DrawCommand, DrawPath};
use gc_arena::Collect; use gc_arena::Collect;
use ruffle_render::bitmap::{BitmapInfo, BitmapSource};
use std::cell::Cell; use std::cell::Cell;
use swf::{FillStyle, LineStyle, Twips}; use swf::{FillStyle, LineStyle, Twips};

View File

@ -330,10 +330,10 @@ impl<'gc> MovieLibrary<'gc> {
} }
} }
impl<'gc> render::BitmapSource for MovieLibrary<'gc> { impl<'gc> ruffle_render::bitmap::BitmapSource for MovieLibrary<'gc> {
fn bitmap(&self, id: u16) -> Option<render::BitmapInfo> { fn bitmap(&self, id: u16) -> Option<ruffle_render::bitmap::BitmapInfo> {
self.get_bitmap(id).and_then(|bitmap| { self.get_bitmap(id).and_then(|bitmap| {
Some(render::BitmapInfo { Some(ruffle_render::bitmap::BitmapInfo {
handle: bitmap.bitmap_handle()?, handle: bitmap.bitmap_handle()?,
width: bitmap.width(), width: bitmap.width(),
height: bitmap.height(), height: bitmap.height(),

12
render/Cargo.toml Normal file
View File

@ -0,0 +1,12 @@
[package]
name = "ruffle_render"
version = "0.1.0"
authors = ["Ruffle LLC <ruffle@ruffle.rs>"]
edition = "2021"
license = "MIT OR Apache-2.0"
[dependencies]
swf = {path = "../swf"}
gc-arena = { git = "https://github.com/ruffle-rs/gc-arena" }
log = "0.4"

View File

@ -11,6 +11,7 @@ log = "0.4"
ruffle_web_common = { path = "../../web/common" } ruffle_web_common = { path = "../../web/common" }
wasm-bindgen = "=0.2.82" wasm-bindgen = "=0.2.82"
fnv = "1.0.7" fnv = "1.0.7"
ruffle_render = { path = ".." }
[dependencies.ruffle_core] [dependencies.ruffle_core]
path = "../../core" path = "../../core"

View File

@ -1,11 +1,10 @@
use fnv::FnvHashMap; use fnv::FnvHashMap;
use ruffle_core::backend::render::{ use ruffle_core::backend::render::{NullBitmapSource, RenderBackend, ShapeHandle, Transform};
swf, Bitmap, BitmapFormat, BitmapHandle, BitmapSource, Color, NullBitmapSource, RenderBackend,
ShapeHandle, Transform,
};
use ruffle_core::color_transform::ColorTransform; use ruffle_core::color_transform::ColorTransform;
use ruffle_core::matrix::Matrix; use ruffle_core::matrix::Matrix;
use ruffle_core::shape_utils::{DistilledShape, DrawCommand, LineScaleMode, LineScales}; use ruffle_core::shape_utils::{DistilledShape, DrawCommand, LineScaleMode, LineScales};
use ruffle_core::swf::{self, Color};
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapSource};
use ruffle_web_common::{JsError, JsResult}; use ruffle_web_common::{JsError, JsResult};
use wasm_bindgen::{Clamped, JsCast}; use wasm_bindgen::{Clamped, JsCast};
use web_sys::{ use web_sys::{

View File

@ -8,6 +8,7 @@ license = "MIT OR Apache-2.0"
[dependencies] [dependencies]
log = "0.4" log = "0.4"
lyon = "1.0.0" lyon = "1.0.0"
ruffle_render = { path = ".." }
[dependencies.ruffle_core] [dependencies.ruffle_core]
path = "../../core" path = "../../core"

View File

@ -5,8 +5,9 @@ use lyon::tessellation::{
FillTessellator, FillVertex, StrokeTessellator, StrokeVertex, StrokeVertexConstructor, FillTessellator, FillVertex, StrokeTessellator, StrokeVertex, StrokeVertexConstructor,
}; };
use lyon::tessellation::{FillOptions, StrokeOptions}; use lyon::tessellation::{FillOptions, StrokeOptions};
use ruffle_core::backend::render::{swf, BitmapHandle, BitmapSource};
use ruffle_core::shape_utils::{DistilledShape, DrawCommand, DrawPath}; use ruffle_core::shape_utils::{DistilledShape, DrawCommand, DrawPath};
use ruffle_core::swf;
use ruffle_render::bitmap::{BitmapHandle, BitmapSource};
pub struct ShapeTessellator { pub struct ShapeTessellator {
fill_tess: FillTessellator, fill_tess: FillTessellator,

1
render/src/lib.rs Normal file
View File

@ -0,0 +1 @@
pub mod bitmap;

View File

@ -10,6 +10,7 @@ js-sys = "0.3.59"
log = "0.4" log = "0.4"
ruffle_render_common_tess = { path = "../common_tess" } ruffle_render_common_tess = { path = "../common_tess" }
ruffle_web_common = { path = "../../web/common" } ruffle_web_common = { path = "../../web/common" }
ruffle_render = { path = ".." }
wasm-bindgen = "=0.2.82" wasm-bindgen = "=0.2.82"
bytemuck = { version = "1.10.0", features = ["derive"] } bytemuck = { version = "1.10.0", features = ["derive"] }
fnv = "1.0.7" fnv = "1.0.7"

View File

@ -1,11 +1,9 @@
use bytemuck::{Pod, Zeroable}; use bytemuck::{Pod, Zeroable};
use fnv::FnvHashMap; use fnv::FnvHashMap;
use ruffle_core::backend::render::{ use ruffle_core::backend::render::{NullBitmapSource, RenderBackend, ShapeHandle, Transform};
Bitmap, BitmapFormat, BitmapHandle, BitmapSource, Color, NullBitmapSource, RenderBackend,
ShapeHandle, Transform,
};
use ruffle_core::shape_utils::DistilledShape; use ruffle_core::shape_utils::DistilledShape;
use ruffle_core::swf; use ruffle_core::swf::{self, Color};
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapSource};
use ruffle_render_common_tess::{ use ruffle_render_common_tess::{
Gradient as TessGradient, GradientType, ShapeTessellator, Vertex as TessVertex, Gradient as TessGradient, GradientType, ShapeTessellator, Vertex as TessVertex,
}; };

View File

@ -10,6 +10,7 @@ wgpu = "0.13.0"
log = "0.4" log = "0.4"
ruffle_core = { path = "../../core", default-features = false } ruffle_core = { path = "../../core", default-features = false }
ruffle_render_common_tess = { path = "../common_tess" } ruffle_render_common_tess = { path = "../common_tess" }
ruffle_render = { path = ".." }
bytemuck = { version = "1.10.0", features = ["derive"] } bytemuck = { version = "1.10.0", features = ["derive"] }
raw-window-handle = "0.4" raw-window-handle = "0.4"
clap = { version = "3.2.16", features = ["derive"], optional = true } clap = { version = "3.2.16", features = ["derive"], optional = true }

View File

@ -7,12 +7,11 @@ use crate::utils::{create_buffer_with_data, format_list, get_backend_names};
use bytemuck::{Pod, Zeroable}; use bytemuck::{Pod, Zeroable};
use enum_map::Enum; use enum_map::Enum;
use fnv::FnvHashMap; use fnv::FnvHashMap;
use ruffle_core::backend::render::{ use ruffle_core::backend::render::{RenderBackend, ShapeHandle, Transform};
Bitmap, BitmapHandle, BitmapSource, Color, RenderBackend, ShapeHandle, Transform,
};
use ruffle_core::color_transform::ColorTransform; use ruffle_core::color_transform::ColorTransform;
use ruffle_core::shape_utils::DistilledShape; use ruffle_core::shape_utils::DistilledShape;
use ruffle_core::swf; use ruffle_core::swf::{self, Color};
use ruffle_render::bitmap::{Bitmap, BitmapHandle, BitmapSource};
use ruffle_render_common_tess::{ use ruffle_render_common_tess::{
DrawType as TessDrawType, Gradient as TessGradient, GradientType, ShapeTessellator, DrawType as TessDrawType, Gradient as TessGradient, GradientType, ShapeTessellator,
Vertex as TessVertex, Vertex as TessVertex,