refactor: remove redundant runtime ownership
Amp-Thread-ID: https://ampcode.com/threads/T-019f9d91-77c1-7206-a60f-ed6554ce92ab Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
|
#![cfg(target_arch = "wasm32")]
|
||||||
|
|
||||||
use ultraviolet::Mat4;
|
use ultraviolet::Mat4;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
use renderer::app_setup::WebAppRuntime;
|
use renderer::app_setup::WebAppRuntime;
|
||||||
use renderer::camera::Camera;
|
use renderer::camera::Camera;
|
||||||
use renderer::render_data::{InstanceType, MeshCreateInfo, RenderData};
|
use renderer::render_data::{InstanceType, MeshCreateInfo, RenderData};
|
||||||
@@ -19,7 +20,6 @@ struct Vertex {
|
|||||||
struct EditorScene {
|
struct EditorScene {
|
||||||
uniform_buffers: [wgpu::Buffer; 2],
|
uniform_buffers: [wgpu::Buffer; 2],
|
||||||
bind_groups: [wgpu::BindGroup; 2],
|
bind_groups: [wgpu::BindGroup; 2],
|
||||||
bind_group_layouts: [wgpu::BindGroupLayout; 2],
|
|
||||||
frame_metadata: FrameMetadata,
|
frame_metadata: FrameMetadata,
|
||||||
cam: Camera,
|
cam: Camera,
|
||||||
}
|
}
|
||||||
@@ -53,7 +53,6 @@ impl renderer::renderer::scene::Scene for EditorScene {
|
|||||||
let mut scene = EditorScene {
|
let mut scene = EditorScene {
|
||||||
uniform_buffers: [uniform_resource.buffer, camera_resource.buffer],
|
uniform_buffers: [uniform_resource.buffer, camera_resource.buffer],
|
||||||
bind_groups: [uniform_resource.bind_group, camera_resource.bind_group],
|
bind_groups: [uniform_resource.bind_group, camera_resource.bind_group],
|
||||||
bind_group_layouts,
|
|
||||||
frame_metadata,
|
frame_metadata,
|
||||||
cam: camera,
|
cam: camera,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#![cfg(target_arch = "wasm32")]
|
||||||
|
|
||||||
use std::sync::mpsc::{self, Sender};
|
use std::sync::mpsc::{self, Sender};
|
||||||
use wasm_bindgen::closure::Closure;
|
use wasm_bindgen::closure::Closure;
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
@@ -5,16 +7,11 @@ use wasm_bindgen::JsCast;
|
|||||||
|
|
||||||
use crate::command_ring::CommandRing;
|
use crate::command_ring::CommandRing;
|
||||||
use crate::message::WindowEvent;
|
use crate::message::WindowEvent;
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
use crate::platform::web;
|
use crate::platform::web;
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
use crate::platform::web::worker::MainWorker;
|
use crate::platform::web::worker::MainWorker;
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
use wasm_bindgen_futures::spawn_local;
|
use wasm_bindgen_futures::spawn_local;
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
use web_sys::AddEventListenerOptions;
|
use web_sys::AddEventListenerOptions;
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
pub struct EventListeners {
|
pub struct EventListeners {
|
||||||
_resize_listener: Closure<dyn FnMut()>,
|
_resize_listener: Closure<dyn FnMut()>,
|
||||||
_pointer_listener: Closure<dyn FnMut(web_sys::PointerEvent)>,
|
_pointer_listener: Closure<dyn FnMut(web_sys::PointerEvent)>,
|
||||||
@@ -24,7 +21,6 @@ pub struct EventListeners {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Setup default window event listeners that forward events to the worker thread
|
/// Setup default window event listeners that forward events to the worker thread
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
pub fn setup_event_listeners(
|
pub fn setup_event_listeners(
|
||||||
worker_chan: &Sender<WindowEvent>,
|
worker_chan: &Sender<WindowEvent>,
|
||||||
canvas: &web_sys::HtmlCanvasElement,
|
canvas: &web_sys::HtmlCanvasElement,
|
||||||
@@ -147,14 +143,12 @@ pub fn setup_event_listeners(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Runtime resources required to keep a WASM application running.
|
/// Runtime resources required to keep a WASM application running.
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
pub struct WebAppRuntime {
|
pub struct WebAppRuntime {
|
||||||
worker: MainWorker,
|
worker: MainWorker,
|
||||||
_event_listeners: EventListeners,
|
_event_listeners: EventListeners,
|
||||||
ring: Box<CommandRing>,
|
ring: Box<CommandRing>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
impl WebAppRuntime {
|
impl WebAppRuntime {
|
||||||
/// Initialize the web worker, canvas ownership, and event listeners.
|
/// Initialize the web worker, canvas ownership, and event listeners.
|
||||||
pub fn new<T: crate::renderer::scene::Scene + 'static>(
|
pub fn new<T: crate::renderer::scene::Scene + 'static>(
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ use wasm_bindgen::{prelude::Closure, JsCast, JsValue};
|
|||||||
use wasm_bindgen_futures::spawn_local;
|
use wasm_bindgen_futures::spawn_local;
|
||||||
use web_sys::DedicatedWorkerGlobalScope;
|
use web_sys::DedicatedWorkerGlobalScope;
|
||||||
|
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
use crate::render_data::RenderDataConfig;
|
||||||
use crate::{
|
use crate::{
|
||||||
command_ring::CommandRing,
|
command_ring::CommandRing,
|
||||||
gltf::{install_imported, ModelBounds},
|
gltf::{install_imported, ModelBounds},
|
||||||
message::{camera_drag, CameraDrag, DrainEventError, MouseMessage, ResizeMessage, WindowEvent},
|
message::{camera_drag, CameraDrag, DrainEventError, MouseMessage, ResizeMessage, WindowEvent},
|
||||||
render_data::{InstanceHandle, InstanceType, MeshHandle, RenderData, RenderDataConfig},
|
render_data::{InstanceHandle, InstanceType, MeshHandle, RenderData},
|
||||||
renderer::scene::Scene,
|
renderer::scene::Scene,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -26,6 +28,7 @@ pub use pipeline_library::PipelineLibrary;
|
|||||||
|
|
||||||
const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
|
const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
|
||||||
|
|
||||||
|
#[cfg(any(target_arch = "wasm32", test))]
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
struct DeviceFeaturePlan {
|
struct DeviceFeaturePlan {
|
||||||
hard: wgpu::Features,
|
hard: wgpu::Features,
|
||||||
@@ -33,6 +36,7 @@ struct DeviceFeaturePlan {
|
|||||||
profiling_enabled: bool,
|
profiling_enabled: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(target_arch = "wasm32", test))]
|
||||||
fn device_feature_plan(profile: bool, supported: wgpu::Features) -> DeviceFeaturePlan {
|
fn device_feature_plan(profile: bool, supported: wgpu::Features) -> DeviceFeaturePlan {
|
||||||
let hard = wgpu::Features::INDIRECT_FIRST_INSTANCE;
|
let hard = wgpu::Features::INDIRECT_FIRST_INSTANCE;
|
||||||
let profiling = profiler::Profiler::requested_features(profile, supported);
|
let profiling = profiler::Profiler::requested_features(profile, supported);
|
||||||
@@ -1290,7 +1294,6 @@ pub struct RendererContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Renderer<T: scene::Scene> {
|
pub struct Renderer<T: scene::Scene> {
|
||||||
canvas: web_sys::OffscreenCanvas,
|
|
||||||
events_chan: Receiver<WindowEvent>,
|
events_chan: Receiver<WindowEvent>,
|
||||||
context: RendererContext,
|
context: RendererContext,
|
||||||
resources: PipelineLibrary,
|
resources: PipelineLibrary,
|
||||||
@@ -2416,7 +2419,6 @@ impl<T: Scene + 'static> Renderer<T> {
|
|||||||
Self::ensure_gltf_pipelines(&mut resources, &context);
|
Self::ensure_gltf_pipelines(&mut resources, &context);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
canvas,
|
|
||||||
events_chan,
|
events_chan,
|
||||||
context,
|
context,
|
||||||
scene,
|
scene,
|
||||||
|
|||||||
@@ -5,8 +5,11 @@ use std::{
|
|||||||
use wasm_bindgen::JsValue;
|
use wasm_bindgen::JsValue;
|
||||||
|
|
||||||
pub const MAX_PROFILE_PASSES: usize = crate::render_graph::MAX_EXECUTIONS;
|
pub const MAX_PROFILE_PASSES: usize = crate::render_graph::MAX_EXECUTIONS;
|
||||||
|
#[cfg(any(target_arch = "wasm32", test))]
|
||||||
const SLOT_COUNT: usize = 4;
|
const SLOT_COUNT: usize = 4;
|
||||||
|
#[cfg(any(target_arch = "wasm32", test))]
|
||||||
const QUERY_COUNT: u32 = (MAX_PROFILE_PASSES * 2) as u32;
|
const QUERY_COUNT: u32 = (MAX_PROFILE_PASSES * 2) as u32;
|
||||||
|
#[cfg(any(target_arch = "wasm32", test))]
|
||||||
const RESOLVE_SIZE: u64 = QUERY_COUNT as u64 * 8;
|
const RESOLVE_SIZE: u64 = QUERY_COUNT as u64 * 8;
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
@@ -78,6 +81,7 @@ pub(crate) struct Profiler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Profiler {
|
impl Profiler {
|
||||||
|
#[cfg(any(target_arch = "wasm32", test))]
|
||||||
pub fn requested_features(requested: bool, supported: wgpu::Features) -> wgpu::Features {
|
pub fn requested_features(requested: bool, supported: wgpu::Features) -> wgpu::Features {
|
||||||
if requested && supported.contains(wgpu::Features::TIMESTAMP_QUERY) {
|
if requested && supported.contains(wgpu::Features::TIMESTAMP_QUERY) {
|
||||||
wgpu::Features::TIMESTAMP_QUERY
|
wgpu::Features::TIMESTAMP_QUERY
|
||||||
@@ -85,6 +89,7 @@ impl Profiler {
|
|||||||
wgpu::Features::empty()
|
wgpu::Features::empty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
pub async fn new(requested: bool, device: &wgpu::Device, queue: &wgpu::Queue) -> Self {
|
pub async fn new(requested: bool, device: &wgpu::Device, queue: &wgpu::Queue) -> Self {
|
||||||
let available = requested && device.features().contains(wgpu::Features::TIMESTAMP_QUERY);
|
let available = requested && device.features().contains(wgpu::Features::TIMESTAMP_QUERY);
|
||||||
let mut slots = Vec::new();
|
let mut slots = Vec::new();
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ const CONTROL_BYTES: u32 = 256;
|
|||||||
const SLOT_BYTES: u32 = 64;
|
const SLOT_BYTES: u32 = 64;
|
||||||
const SNAPSHOT_HEADER_BYTES: usize = 64;
|
const SNAPSHOT_HEADER_BYTES: usize = 64;
|
||||||
const DATA_OFFSET: usize = 448;
|
const DATA_OFFSET: usize = 448;
|
||||||
const DESCRIPTOR_BYTES: usize = 32;
|
|
||||||
const STREAMS: usize = 12;
|
const STREAMS: usize = 12;
|
||||||
const SCHEMA_FLAGS: u32 = 3; // dense arrays | affine transforms
|
const SCHEMA_FLAGS: u32 = 3; // dense arrays | affine transforms
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user