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

View File

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

View File

@ -17,6 +17,7 @@ indexmap = "1.9.1"
log = "0.4"
minimp3 = { version = "0.5.1", optional = true }
png = { version = "0.17.5" }
ruffle_render = { path = "../render" }
ruffle_macros = { path = "macros" }
ruffle_wstr = { path = "../wstr" }
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::avm_error;
use crate::avm_warn;
use crate::backend::{navigator::NavigationMethod, render};
use crate::backend::navigator::NavigationMethod;
use crate::display_object::{
Bitmap, DisplayObject, EditText, MovieClip, TDisplayObject, TDisplayObjectContainer,
};
@ -358,7 +358,7 @@ fn begin_bitmap_fill<'gc>(
} else {
return Ok(Value::Undefined);
};
let bitmap = render::BitmapInfo {
let bitmap = ruffle_render::bitmap::BitmapInfo {
handle,
width: bitmap_data.width() as u16,
height: bitmap_data.height() as u16,

View File

@ -1,4 +1,3 @@
mod bitmap;
mod null;
mod utils;
@ -7,9 +6,9 @@ pub use utils::{determine_jpeg_tag_format, remove_invalid_jpeg_data};
use crate::matrix::Matrix;
use crate::shape_utils::DistilledShape;
pub use crate::{transform::Transform, Color};
pub use bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo, BitmapSource};
pub use crate::transform::Transform;
use downcast_rs::Downcast;
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo, BitmapSource};
pub use swf;
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_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 push_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::matrix::Matrix;
use crate::shape_utils::DistilledShape;
use crate::transform::Transform;
use ruffle_render::bitmap::{Bitmap, BitmapHandle, BitmapInfo, BitmapSource};
use swf::Color;
pub struct NullBitmapSource;

View File

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

View File

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

View File

@ -1,10 +1,11 @@
use gc_arena::Collect;
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::turbulence::Turbulence;
use bitflags::bitflags;
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle};
use std::ops::Range;
/// 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,
StageObject as Avm2StageObject, Value as Avm2Value,
};
use crate::backend::render::BitmapHandle;
use crate::context::{RenderContext, UpdateContext};
use crate::display_object::{DisplayObjectBase, DisplayObjectPtr, TDisplayObject};
use crate::prelude::*;
use crate::vminterface::{AvmType, Instantiator};
use gc_arena::{Collect, Gc, GcCell, MutationContext};
use ruffle_render::bitmap::BitmapHandle;
use std::cell::{Ref, RefMut};
/// 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::{
Activation as Avm2Activation, Object as Avm2Object, StageObject as Avm2StageObject,
};
use crate::backend::render::BitmapInfo;
use crate::backend::video::{EncodedFrame, VideoStreamHandle};
use crate::bounding_box::BoundingBox;
use crate::context::{RenderContext, UpdateContext};
@ -13,6 +12,7 @@ use crate::prelude::*;
use crate::tag_utils::{SwfMovie, SwfSlice};
use crate::vminterface::{AvmObject, AvmType, Instantiator};
use gc_arena::{Collect, GcCell, MutationContext};
use ruffle_render::bitmap::BitmapInfo;
use std::borrow::{Borrow, BorrowMut};
use std::cell::{Ref, RefMut};
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::context::RenderContext;
use crate::shape_utils::{DistilledShape, DrawCommand, DrawPath};
use gc_arena::Collect;
use ruffle_render::bitmap::{BitmapInfo, BitmapSource};
use std::cell::Cell;
use swf::{FillStyle, LineStyle, Twips};

View File

@ -330,10 +330,10 @@ impl<'gc> MovieLibrary<'gc> {
}
}
impl<'gc> render::BitmapSource for MovieLibrary<'gc> {
fn bitmap(&self, id: u16) -> Option<render::BitmapInfo> {
impl<'gc> ruffle_render::bitmap::BitmapSource for MovieLibrary<'gc> {
fn bitmap(&self, id: u16) -> Option<ruffle_render::bitmap::BitmapInfo> {
self.get_bitmap(id).and_then(|bitmap| {
Some(render::BitmapInfo {
Some(ruffle_render::bitmap::BitmapInfo {
handle: bitmap.bitmap_handle()?,
width: bitmap.width(),
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" }
wasm-bindgen = "=0.2.82"
fnv = "1.0.7"
ruffle_render = { path = ".." }
[dependencies.ruffle_core]
path = "../../core"

View File

@ -1,11 +1,10 @@
use fnv::FnvHashMap;
use ruffle_core::backend::render::{
swf, Bitmap, BitmapFormat, BitmapHandle, BitmapSource, Color, NullBitmapSource, RenderBackend,
ShapeHandle, Transform,
};
use ruffle_core::backend::render::{NullBitmapSource, RenderBackend, ShapeHandle, Transform};
use ruffle_core::color_transform::ColorTransform;
use ruffle_core::matrix::Matrix;
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 wasm_bindgen::{Clamped, JsCast};
use web_sys::{

View File

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

View File

@ -5,8 +5,9 @@ use lyon::tessellation::{
FillTessellator, FillVertex, StrokeTessellator, StrokeVertex, StrokeVertexConstructor,
};
use lyon::tessellation::{FillOptions, StrokeOptions};
use ruffle_core::backend::render::{swf, BitmapHandle, BitmapSource};
use ruffle_core::shape_utils::{DistilledShape, DrawCommand, DrawPath};
use ruffle_core::swf;
use ruffle_render::bitmap::{BitmapHandle, BitmapSource};
pub struct ShapeTessellator {
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"
ruffle_render_common_tess = { path = "../common_tess" }
ruffle_web_common = { path = "../../web/common" }
ruffle_render = { path = ".." }
wasm-bindgen = "=0.2.82"
bytemuck = { version = "1.10.0", features = ["derive"] }
fnv = "1.0.7"

View File

@ -1,11 +1,9 @@
use bytemuck::{Pod, Zeroable};
use fnv::FnvHashMap;
use ruffle_core::backend::render::{
Bitmap, BitmapFormat, BitmapHandle, BitmapSource, Color, NullBitmapSource, RenderBackend,
ShapeHandle, Transform,
};
use ruffle_core::backend::render::{NullBitmapSource, RenderBackend, ShapeHandle, Transform};
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::{
Gradient as TessGradient, GradientType, ShapeTessellator, Vertex as TessVertex,
};

View File

@ -10,6 +10,7 @@ wgpu = "0.13.0"
log = "0.4"
ruffle_core = { path = "../../core", default-features = false }
ruffle_render_common_tess = { path = "../common_tess" }
ruffle_render = { path = ".." }
bytemuck = { version = "1.10.0", features = ["derive"] }
raw-window-handle = "0.4"
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 enum_map::Enum;
use fnv::FnvHashMap;
use ruffle_core::backend::render::{
Bitmap, BitmapHandle, BitmapSource, Color, RenderBackend, ShapeHandle, Transform,
};
use ruffle_core::backend::render::{RenderBackend, ShapeHandle, Transform};
use ruffle_core::color_transform::ColorTransform;
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::{
DrawType as TessDrawType, Gradient as TessGradient, GradientType, ShapeTessellator,
Vertex as TessVertex,