web: Add features for enabling webgl/canvas backend

This commit is contained in:
Mike Welsh 2020-05-02 02:59:13 -07:00
parent e58cca3287
commit 936b314569
2 changed files with 28 additions and 6 deletions

View File

@ -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"

View File

@ -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())
}