web: Add features for enabling webgl/canvas backend
This commit is contained in:
parent
e58cca3287
commit
936b314569
|
@ -8,8 +8,10 @@ edition = "2018"
|
||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
default = ["console_error_panic_hook", "console_log", "webgl"]
|
||||||
lzma = ["ruffle_core/lzma"]
|
lzma = ["ruffle_core/lzma"]
|
||||||
default = ["console_error_panic_hook", "console_log"]
|
canvas = ["ruffle_render_canvas"]
|
||||||
|
webgl = ["ruffle_render_webgl"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
byteorder = "1.3.4"
|
byteorder = "1.3.4"
|
||||||
|
@ -19,9 +21,9 @@ fnv = "1.0.3"
|
||||||
generational-arena = "0.2.7"
|
generational-arena = "0.2.7"
|
||||||
js-sys = "0.3.25"
|
js-sys = "0.3.25"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
ruffle_render_canvas = { path = "../render/canvas" }
|
ruffle_render_canvas = { path = "../render/canvas", optional = true }
|
||||||
ruffle_web_common = { path = "common" }
|
ruffle_web_common = { path = "common" }
|
||||||
ruffle_render_webgl = { path = "../render/webgl" }
|
ruffle_render_webgl = { path = "../render/webgl", optional = true }
|
||||||
url = "2.1.1"
|
url = "2.1.1"
|
||||||
wasm-bindgen = "0.2.57"
|
wasm-bindgen = "0.2.57"
|
||||||
wasm-bindgen-futures = "0.4.4"
|
wasm-bindgen-futures = "0.4.4"
|
||||||
|
|
|
@ -6,9 +6,8 @@ mod navigator;
|
||||||
use crate::{audio::WebAudioBackend, input::WebInputBackend, navigator::WebNavigatorBackend};
|
use crate::{audio::WebAudioBackend, input::WebInputBackend, navigator::WebNavigatorBackend};
|
||||||
use generational_arena::{Arena, Index};
|
use generational_arena::{Arena, Index};
|
||||||
use js_sys::Uint8Array;
|
use js_sys::Uint8Array;
|
||||||
|
use ruffle_core::backend::render::RenderBackend;
|
||||||
use ruffle_core::PlayerEvent;
|
use ruffle_core::PlayerEvent;
|
||||||
use ruffle_render_canvas::WebCanvasRenderBackend;
|
|
||||||
use ruffle_render_webgl::WebGlRenderBackend;
|
|
||||||
use std::mem::drop;
|
use std::mem::drop;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::{cell::RefCell, error::Error, num::NonZeroI32};
|
use std::{cell::RefCell, error::Error, num::NonZeroI32};
|
||||||
|
@ -102,7 +101,7 @@ impl Ruffle {
|
||||||
swf_data.copy_to(&mut data[..]);
|
swf_data.copy_to(&mut data[..]);
|
||||||
|
|
||||||
let window = web_sys::window().ok_or_else(|| "Expected window")?;
|
let window = web_sys::window().ok_or_else(|| "Expected window")?;
|
||||||
let renderer = Box::new(WebGlRenderBackend::new(&canvas)?);
|
let renderer = create_renderer(&canvas)?;
|
||||||
let audio = Box::new(WebAudioBackend::new()?);
|
let audio = Box::new(WebAudioBackend::new()?);
|
||||||
let navigator = Box::new(WebNavigatorBackend::new());
|
let navigator = Box::new(WebNavigatorBackend::new());
|
||||||
let input = Box::new(WebInputBackend::new(&canvas));
|
let input = Box::new(WebInputBackend::new(&canvas));
|
||||||
|
@ -469,3 +468,24 @@ impl Ruffle {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn create_renderer(canvas: &HtmlCanvasElement) -> Result<Box<dyn RenderBackend>, Box<dyn Error>> {
|
||||||
|
#[cfg(not(any(feature = "canvas", feature = "webgl")))]
|
||||||
|
std::compile_error!("You must enable one of the render backend features (e.g., webgl).");
|
||||||
|
|
||||||
|
#[cfg(feature = "webgl")]
|
||||||
|
{
|
||||||
|
if let Ok(renderer) = ruffle_render_webgl::WebGlRenderBackend::new(canvas) {
|
||||||
|
return Ok(Box::new(renderer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "canvas")]
|
||||||
|
{
|
||||||
|
if let Ok(renderer) = ruffle_render_canvas::WebCanvasRenderBackend::new(canvas) {
|
||||||
|
return Ok(Box::new(renderer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Err("Unable to create renderer".into())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue