web: Rename wgpu feature to webgpu, add wgpu-webgl feature to use webgl through wgpu

This commit is contained in:
Nathan Adams 2022-08-29 06:57:18 +02:00 committed by Mike Welsh
parent 0ac2a3f361
commit 03744d46f1
4 changed files with 24 additions and 6 deletions

View File

@ -335,7 +335,7 @@ jobs:
env: env:
BUILD_ID: ${{ github.run_number }} BUILD_ID: ${{ github.run_number }}
# Build web demo with WebGPU support for testing in Chrome origin trial on ruffle.rs # Build web demo with WebGPU support for testing in Chrome origin trial on ruffle.rs
CARGO_FEATURES: ${{ matrix.demo && 'wgpu' || '' }} CARGO_FEATURES: ${{ matrix.demo && 'webgpu' || '' }}
FIREFOX_EXTENSION_ID: ${{ secrets.FIREFOX_EXTENSION_ID }} # Needed to inject into manifest.json FIREFOX_EXTENSION_ID: ${{ secrets.FIREFOX_EXTENSION_ID }} # Needed to inject into manifest.json
working-directory: web working-directory: web
shell: bash -l {0} shell: bash -l {0}

View File

@ -32,3 +32,4 @@ features = ["HtmlCanvasElement"]
[features] [features]
render_debug_labels = [] render_debug_labels = []
render_trace = ["wgpu/trace"] render_trace = ["wgpu/trace"]
webgl = ["wgpu/webgl"]

View File

@ -23,7 +23,8 @@ lzma = ["ruffle_core/lzma"]
# web features # web features
canvas = ["ruffle_render_canvas"] canvas = ["ruffle_render_canvas"]
webgl = ["ruffle_render_webgl"] webgl = ["ruffle_render_webgl"]
wgpu = ["ruffle_render_wgpu"] webgpu = ["ruffle_render_wgpu"]
wgpu-webgl = ["ruffle_render_wgpu", "ruffle_render_wgpu/webgl"]
[dependencies] [dependencies]
console_error_panic_hook = { version = "0.1.7", optional = true } console_error_panic_hook = { version = "0.1.7", optional = true }

View File

@ -1227,7 +1227,7 @@ async fn create_renderer(
document: &web_sys::Document, document: &web_sys::Document,
config: &Config, config: &Config,
) -> Result<(PlayerBuilder, HtmlCanvasElement), Box<dyn Error>> { ) -> Result<(PlayerBuilder, HtmlCanvasElement), Box<dyn Error>> {
#[cfg(not(any(feature = "canvas", feature = "webgl")))] #[cfg(not(any(feature = "canvas", feature = "webgpu", feature = "wgpu-webgl")))]
std::compile_error!("You must enable one of the render backend features (e.g., webgl)."); std::compile_error!("You must enable one of the render backend features (e.g., webgl).");
let _is_transparent = config.wmode.as_deref() == Some("transparent"); let _is_transparent = config.wmode.as_deref() == Some("transparent");
@ -1235,7 +1235,7 @@ async fn create_renderer(
// Try to create a backend, falling through to the next backend on failure. // Try to create a backend, falling through to the next backend on failure.
// We must recreate the canvas each attempt, as only a single context may be created per canvas // We must recreate the canvas each attempt, as only a single context may be created per canvas
// with `getContext`. // with `getContext`.
#[cfg(all(feature = "wgpu", target_family = "wasm"))] #[cfg(all(feature = "webgpu", target_family = "wasm"))]
{ {
// Check that we have access to WebGPU (navigator.gpu should exist). // Check that we have access to WebGPU (navigator.gpu should exist).
if web_sys::window() if web_sys::window()
@ -1243,7 +1243,7 @@ async fn create_renderer(
.and_then(|window| js_sys::Reflect::has(&window.navigator(), &JsValue::from_str("gpu"))) .and_then(|window| js_sys::Reflect::has(&window.navigator(), &JsValue::from_str("gpu")))
.unwrap_or_default() .unwrap_or_default()
{ {
log::info!("Creating wgpu renderer..."); log::info!("Creating wgpu webgpu renderer...");
let canvas: HtmlCanvasElement = document let canvas: HtmlCanvasElement = document
.create_element("canvas") .create_element("canvas")
.into_js_result()? .into_js_result()?
@ -1254,10 +1254,26 @@ async fn create_renderer(
Ok(renderer) => { Ok(renderer) => {
return Ok((builder.with_renderer(renderer), canvas)); return Ok((builder.with_renderer(renderer), canvas));
} }
Err(error) => log::error!("Error creating wgpu renderer: {}", error), Err(error) => log::error!("Error creating wgpu webgpu renderer: {}", error),
} }
} }
} }
#[cfg(all(feature = "wgpu-webgl", target_family = "wasm"))]
{
log::info!("Creating wgpu webgl renderer...");
let canvas: HtmlCanvasElement = document
.create_element("canvas")
.into_js_result()?
.dyn_into()
.map_err(|_| "Expected HtmlCanvasElement")?;
match ruffle_render_wgpu::WgpuRenderBackend::for_canvas(&canvas).await {
Ok(renderer) => {
return Ok((builder.with_renderer(renderer), canvas));
}
Err(error) => log::error!("Error creating wgpu webgl renderer: {}", error),
}
}
// Try to create a backend, falling through to the next backend on failure. // Try to create a backend, falling through to the next backend on failure.
// We must recreate the canvas each attempt, as only a single context may be created per canvas // We must recreate the canvas each attempt, as only a single context may be created per canvas